1、构建一个四位移位寄存器,它也可以作为下行计数器。当shift_ena为1时,数据首先在最高有效位移位。当count_ena为1时,移位寄存器中当前的数字递减。由于整个系统从未同时使用shift_ena和count_ena,因此如果两个控制输入都为1(这主要意味着哪种情况具有更高的优先级),则电路的功能不重要。
乍一看感觉很简单啊,写完就报错,可恶
module top_module (
input clk,
input shift_ena,
input count_ena,
input data,
output [3:0] q);
//首先,当上升沿来临时,读取data的值,若shfit使能信号为1,移位;若count为1,q+1;
always @(posedge clk)
begin
if(shift_ena) begin q[3]<=q[2];q[2]<=q[1];q[1]<=q[0];q[0]<=0; end
if(count_ena) q<=q-1;
q[0]<=data;
end
endmodule
首先,从移位操作的波形来看
在data一直置1时,q并不会马上接受,而是在shift_ena为1时才接收。
则这里应该将代码改为
module top_module (
input clk,
input shift_ena,
input count_ena,
input data,
output [3:0] q);
//首先,当上升沿来临时,读取data的值,若shfit使能信号为1,移位;若count为1,q+1;
always @(posedge clk)
begin
if(shift_ena) begin q[3]<=q[2];q[2]<=q[1];q[1]<=q[0];q[0]<=data;; end
if(count_ena) q<=q-1;
end
endmodule
啊,果然,没问题了
比想象中更简单了^_^