问题描述
如何在Verilog中初始注册(触发器)值?
解决/修复方法
解决/修复方法1:
使用“初始”模块在器件上电期间控制寄存器的初始值。
您可以直接在Verilog源代码中使用“初始”模块。该模块可以通过XST综合并实现。当没有复位逻辑时,尤其使用此解决方案。
使用以下命令对初始模块进行编码以推断和实例化逻辑。
用于XST综合
“Test”是顶级文件:
模块测试(clk,ina,inb,outa,outb);
输入clk,ina,inb;
输出outa,outb;
reg outa;
reg outb;
reg [2:0]计数器;
初始
开始
计数器<= 0; //寄存器计数器的初始值为0;
OUTA <= 0; // register outa的初始值为0;
OUTB <= 1; // register outb的初始值为1;
结束
永远@(posedge clk)
开始
如果(INA)
开始
计数器<=计数器+ 1;
结束
否则如果(inb)
开始
计数器<=计数器-1;
结束
结束
永远@(posedge clk)
开始
如果(计数器== 7)
开始
OUTA <= 1;
OUTB <= 0;
结束
其他
开始
OUTA <= 0;
OUTB <= 1;
结束
结束
endmodule
解决/修复方法2:
解决此问题的另一种方法是使用INIT属性在器件上电期间控制寄存器的初始值。使用“S”值设置上电,“R”值在上电时复位。 (默认为“重置”。)
有关详细信息,请参阅(Xilinx答复12293) 。
没有回复内容