verilog入门级--流水灯--警告修改。

 

首先标注一些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 

 

 

 

 

你可能感兴趣的:(Verilog)