我正在学习Verilog我正在尝试创建一个代码,我得到一个LED闪烁在一定的频率。我知道我使用的时钟是100Mhz,所以我希望它以1Hz的周期运行。我设置了一个27位的注册表,这应该会让我得到1*10^8。
module main(
input wire clk, //100MHz//
input wire reset_,
output reg[1:0] LED1 //LED On/Off Two-States//
);
reg ON = 1'b1; //INIT//
reg[27:0] LEDStateCount; //LED Counter - 27 Bit Stored//
reg OFF; //State of LED//
assign LED1[0] = OFF;
assign LED1[1] = ON;
always @(posedge clk or negedge reset_)begin
if (!reset_)begin
LEDStateCount <= 27'd0; //On startup, clear value//
end
else if (LEDStateCount<LEDStateCount[27'd50000000])begin
LEDStateCount <= LEDStateCount + 1; //Accumulate to ~50,000,000//
OFF <= LEDStateCount[27'd50000000]; //LED Off Until Value Reached//
end
end
endmodule
在Quartus-
中编译时出现错误错误(10219):Verilog HDL连续分配错误在Frequencytest.v(10): object "LED1"赋值的左边必须有一个净类型
错误(10219):Verilog HDL连续分配错误在Frequencytest.v(11): object "LED1"赋值的左边必须有一个净类型
我相信这与我在制作reg条目时声明的内容有关。这是我做这个的时候参考的两页,
Badprog.com - LED闪烁在Verilog
类似的线程闪烁的LED
我敢肯定这段代码除了语法错误之外还有其他问题。
错误告诉您不应该将assign
用于reg
类型。要解决这个问题,修改:
output reg[1:0] LED1 //LED On/Off Two-States//
:
output [1:0] LED1 //LED On/Off Two-States//
我还得到了LEDStateCount[27'd50000000]
的两种用法的警告。
Warning-[SIOB] Select index out of bounds
"LEDStateCount[27'd50000000]"
The select index is out of declared bounds : [27:0].
In module : main.
括号内的数字必须在0 ~ 27之间。不能是50,000,000
else if (LEDStateCount<LEDStateCount[27'd50000000])begin
应该是这样的:
else if (LEDStateCount<27'd50000000)begin