本文提供了用Verilog设计4位寄存器的代码,且时钟周期可调,实现异步清零与同步置数,已通过Basys2开发板验证。
代码如下:
module register
#(parameter N=4)
(
input wire load,
input wire clr,
input wire clk,
input wire [N-1:0] d,
output reg [N-1:0] q
);
reg [25:0] m;
reg n;
initial m=26'b0;
initial n=0;
always@(posedge clk) //clk频率为50MHz
begin
if(m==25000000)//通过改变m的条件值可改变n的频率
n=!n;
else
m<=m+1;
if(m==25000000)//通过改变m的条件值可改变n的频率
m<=0;
else
m<=m+1;
end
always@(posedge n or posedge clr)
begin
if(clr==1)
q<=0;
else if(load==1)
q<=d;
else
q<=q;
end
endmodule
约束条件如下:
NET"d[0]"LOC=P11;
NET"d[1]"LOC=L3;
NET"d[2]"LOC=K3;
NET"d[3]"LOC=B4;
NET"clk"LOC=B8;
NET"clr"LOC=N3;
NET"load"LOC=E2;
NET"q[0]"LOC=M5;
NET"q[1]"LOC=M11;
NET"q[2]"LOC=P7;
NET"q[3]"LOC=P6;
欢迎大家指正,觉得有用就赞一个~