恩 移位寄存器的话这里有两个例子,楼主你参考一下
第一个是用位拼接符来做的,在百度上输入“Verilog 串并转换”很容易就查到了,这个是别人的函数,我把名字换成你的,可以直接用到自己的应用中。
module Serial_to_Para(clk,reset,en,in,out);
input clk,reset,en,in;
output[3:0] out;
reg[3:0] out;
always @(posedge clk)
begin
if(reset)
out<=4'h0;
else
if(en)
out<={out[2:0],in}; //使用连接运算符
end
endmodule
上面那个out<={out[2:0],in};这一句可以换成out<={in,out[3:1]};这样就变成了从高位移入,很容易改成双向移位寄存器。
另外一种是比较贴近楼主设计思想的代码例子了,在百度可以搜到,这里放出来你可以参考一下。
module Serial_to_Para(clk,rst,in,out)
input clk,rst;
input in;
output[3:0] out;
wire[3:0] out;
reg [3:0] shiftreg;
always@(posedge clk or negedge rst) // 异步清零
if(!rst)
shiftreg<=0;
else begin
shiftreg[0]<=in;
shiftreg[1]<=shiftreg[0];
shiftreg[2]<=shiftreg[1];
shiftreg[3]<=shiftreg[2];
end
assign out=shiftreg;
endmodule
猜测一下,楼主想要使用“<<”运算符是为了达到D触发器级联实现串并转换的效果对吧?如果是的话那么第二个例子刚好是这个了。对于你的代码中<<操作造成仿真结果不正确的情况,还暂时没分析出来是怎么回事。可以等等看有没有人可以帮到你。如果只是需要找到替代算法的话,希望上面两个例子可以对你有帮助。
温馨提示:答案为网友推荐,仅供参考