首先标注一些verilog中的几个警告的处理:
WARNING:HDLCompiler:413 - "C:\Users\Administrator\Desktop\my_work\12-0801\myled\led.v" Line 49: Result of 28-bit expression is truncated to fit in 27-bit target.
---位数不统一,需要你查一下是不是影响逻辑;
这个warning经常出的,比如你计数器cnt <= cnt + 1,如果你这么写就会报warning,但是如果你把那个1前面也标明位数就OK了,比如cnt <= cnt + 1'b1等,仔细查下,说不定没什么影响
WARNING:Xst:1293 - FF/Latch <count_27> has a constant value of 0 in block <led>. This FF/Latch will be trimmed during the optimization process.
--在led源文件中有常为0,没有用到的位数。
需要检查修改源文件中变量的位数是不是设置的有点多了。之前是reg[27:0] count ;就会有警告,原因是 if(count==27'h4c4b400) //80mhz也仅用到了27位。改为reg [26:0] count;就没有警告了。
源代码:
module led(
clk80M, //80M时钟输入
RSTn, //复位信号,低电平复位
led //led输出
);
input clk80M;
input RSTn;
output[3:0] led;
reg [3:0] led;
reg [26:0] count; //分频计数器
initial begin
led = 4'h8;
count = 27'h0;
end
always @ (posedge clk80M or negedge RSTn)
begin
if(!RSTn)
begin
led<=4'h8;
count<=27'h0;
end
else
begin
count <= count+1'b1;
if(count==27'h4c4b400) //80mhz
begin
led<=led>>1; //led移位输出
count<=0;
if(led==4'h0)
led<=4'h8;
end
end
end
endmodule
/***********************我是分界线*********************************************************/
上面的程序不知道是什么原因,就只有一个灯亮。后面修改过后 的程序是从左往右点亮四个灯,然后再循环点亮。经下在测试,是可行的。
module led(
clk80M, //80M时钟输入
// RSTn, //复位信号,低电平复位
led //led输出
);
input clk80M;
//input RSTn;
output[3:0] led;
reg [3:0] led;
reg [26:0] count; //分频计数器
initial begin
led = 4'h8;
count = 27'h0;
end
always @ (posedge clk80M )
begin
count <= count+1'b1;
if(count==27'h4c4b400) //80mhz
begin
led<=led>>1; //led移位输出
count<=0;
if(led==4'h0)
led<=4'h8;
end
end
endmodule