概述
前言
FPGA中的串并转换操作,可以说是非常灵活的操作了,核心思想就是移位。
串转并就是把1位的输入放到N位reg的最低位,然后N位reg左移一位,在把1位输入放到左移后的reg的最低位,这样循环,就可以得到,以最高位开始传输,最低位传输完成的N位数据了;
并转串就是把并行的N位数据的最高位给1位输出,然后类似的循环左移就可以了。
一、并转串操作
代码:B并 2to C串
module B2C (
input clk ,
input _rst ,
input en ,
input [7:0] din ,
output dout
);//并转串模块 8位输入,1位输出
reg [7:0] in = 'd0;
reg [7:0] data = 'd0;
reg out = 'd0;
reg [3:0]cnt;//计数
assign dout = data[7];//data的最高位接输出线
always @(posedge clk or negedge _rst) begin
if(!_rst)begin
out <= 'd0;
data<= 'd0;
cnt <= 'd0;
end
else if(en) begin
data <= {data[6:0],data[7]};//核心也是循环左移
cnt <= cnt + 'd1;
end
if (cnt == 'd7) begin
data <= din;//这里din是在cnt清零时给到data上传的
cnt <= 'd0;
end
end
endmodule
二、串转并操作
代码:C串 2to B并
module C2B (
input clk ,
input _rst ,
input en ,
input din ,
output [7:0] dout
);//串转并模块 1位输入 8位输出
reg [7:0] out;
reg [7:0] data;
reg [3:0]cnt; //计数
assign dout = out;
always @(posedge clk or negedge _rst) begin
if(!_rst)begin
out <= 'd0;
data<= 'd0;
cnt <= 'd0;
end
else if(en) begin
data <= {data[6:0],din};//核心代码左移寄存器
cnt <= cnt + 'd1;
end
if (cnt == 'd7) begin
cnt <= 'd0;//8位清零
end
if (cnt == 'd0) begin
out <= data;//单独取out,因为和cnt清零一起取时,差一个节拍
end
end
endmodule
仿真
这里把5a(01011010)给到B2C并转串上,然后并转串发8次传到串转并上得出正确的值。
最后
以上就是敏感烧鹅为你收集整理的FPGA中的串转并,并转串操作前言一、并转串操作二、串转并操作仿真的全部内容,希望文章能够帮你解决FPGA中的串转并,并转串操作前言一、并转串操作二、串转并操作仿真所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复