锆石科技社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 298|回复: 8

自己瞎编的流水灯程序不知道那里有错请大神们指点一下!

[复制链接]

5

主题

42

帖子

1169

积分

金牌会员

Rank: 6Rank: 6

积分
1169
发表于 2016-10-31 00:11:45 | 显示全部楼层 |阅读模式
//---------------------------------------------------------------------------
//--        文件名        :        Verilog_LED1
//--        作者                :        LAN
//--        描述                :        LED流水灯
//--        修订历史        :        2016-10-30
//---------------------------------------------------------------------------
module Verilog_LED1
(
        //输入端口
        CLK_50M,RST_N,       
        //输出端口
        LED1,LED2,LED3,LED4,
);
               
///---------------------------------------------------------------------------
//--        外部端口声明
//---------------------------------------------------------------------------
input                         CLK_50M;                                        //时钟的端口,开发板用的50M晶振
input                                RST_N;                                        //复位的端口,低电平复位
output                        LED1;                                                //对应开发板上的LED1
output                        LED2;                                                //对应开发板上的LED2
output                        LED3;                                                //对应开发板上的LED3
output                        LED4;                                                //对应开发板上的LED4


//---------------------------------------------------------------------------
//--        内部端口声明
//---------------------------------------------------------------------------
reg        [26:0]        time_cnt;                                //用来控制LED闪烁频率的定时计数器
reg        [26:0]        time_cnt_n;                                //time_cnt的下一个状态
reg                                led_reg;                                        //用来控制LED亮灭的显示寄存器
reg                                led_reg1;                                        //用来控制LED亮灭的显示寄存器
reg                                led_reg2;                                        //用来控制LED亮灭的显示寄存器
reg                                led_reg3;                                        //用来控制LED亮灭的显示寄存器
reg                                led_reg_n;                                //led_reg的下一个状态
reg                                led_reg_n1;                                //led_reg1的下一个状态
reg                                led_reg_n2;                                //led_reg2的下一个状态
reg                                led_reg_n3;                                //led_reg3的下一个状态

//设置定时器的时间为1s,计算方法为  (1*10^6)us / (1/50)us  50MHz为开发板晶振
parameter SET_TIME_1S = 27'd50_000_000;
parameter SET_TIME_2S = 27'd100_000_000;       
parameter SET_TIME_3S = 27'd150_000_000;       
parameter SET_TIME_4S = 27'd200_000_000;                       

//---------------------------------------------------------------------------
//--        逻辑功能实现       
//---------------------------------------------------------------------------
//时序电路,用来给time_cnt寄存器赋值
always @ (posedge CLK_50M or negedge RST_N)  
begin
        if(!RST_N)                                                                //判断复位
                time_cnt  <=  27'h0;                                //初始化time_cnt值
        else
                time_cnt  <=  time_cnt_n;                //用来给time_cnt赋值
end

//组合电路,实现1s的定时计数器
always @ (*)  
begin
        if(time_cnt == SET_TIME_4S)                //判断1s时间
                time_cnt_n = 27'h0;                //如果到达1s,定时计数器将会被清零
        else
                time_cnt_n = time_cnt + 27'h1;//如果未到1s,定时计数器将会继续累加
end

//---------------------------------------------------------------------------
//时序电路,用来给led_reg寄存器赋值
always @ (posedge CLK_50M or negedge RST_N)  
begin
        if(!RST_N)                                                                //判断复位
                led_reg <=  1'b1;                                        //初始化led_reg值
                led_reg1 <=  1'b0;                                        //初始化led_reg1值
                led_reg2 <=  1'b0;                                        //初始化led_reg2值
                led_reg3 <=  1'b0;                                //初始化led_reg3值
        else
                {led_reg <=  led_reg_n;                        //用来给led_reg赋值保持原值
                led_reg1 <=  led_reg_n1;                        //用来给led_reg1赋值保持原值
                led_reg2 <=  led_reg_n2;                        //用来给led_reg2赋值保持原值
                led_reg3 <=  led_reg_n3;}                        //用来给led_reg3赋值保持原值
end

//组合电路,判断时间,控制LED的亮或灭
always @ (*)  
begin
        if(time_cnt == SET_TIME_1S)                //判断1s时间
                led_reg_n = <=  1'b0;                        //如果到达1s,显示寄存器将会改变LED的状态
                if else(time_cnt == SET_TIME_2S)                //判断2s时间
                                       led_reg <=  1'b0;                                        //初始化led_reg值
                            led_reg1 <=  1'b1;                                        //初始化led_reg1值
                            led_reg2 <=  1'b0;                                        //初始化led_reg2值
                            led_reg3 <=  1'b0;                                        //初始化led_reg3值
                                                                if else(time_cnt == SET_TIME_3S)                //判断2s时间
                                                     led_reg <=  1'b0;                                        //初始化led_reg值
                                          led_reg1 <=  1'b0;                                        //初始化led_reg1值
                                          led_reg2 <=  1'b1;                                        //初始化led_reg2值
                                          led_reg3 <=  1'b0;                                        //初始化led_reg3值
                                          else
                                                   led_reg <=  1'b0;                                        //初始化led_reg值
                                                   led_reg1 <=  1'b0;                                        //初始化led_reg1值
                                                   led_reg2 <=  1'b0;                                        //初始化led_reg2值
                                                   led_reg3 <=  1'b1;                                        //初始化led_reg3值
end
assign LED1 = led_reg;                                        //最后,将显示寄存器的值赋值给端口LED1
assign LED2 = led_reg1;
assign LED3 = led_reg2;
assign LED4 = led_reg3;
endmodule                                                                       
刚刚开始学请大神们指点一下,谢谢!

回复

使用道具 举报

发表于 2016-10-31 07:33:28 | 显示全部楼层
是else if,
回复

使用道具 举报

5

主题

42

帖子

1169

积分

金牌会员

Rank: 6Rank: 6

积分
1169
 楼主| 发表于 2016-10-31 19:32:55 | 显示全部楼层

改了还是会报错。。。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

23

积分

新手上路

Rank: 1

积分
23
发表于 2016-11-1 12:30:02 | 显示全部楼层
很多地方都少了begin和end,特别是一个if后面有几个赋值的情况下,要用begin和end包括起来
回复 支持 反对

使用道具 举报

发表于 2016-11-1 14:16:22 | 显示全部楼层
建议你先学习一下硬件语法篇,先把基础语法给学习一下,这些问题就能够很好的解决了。
回复 支持 反对

使用道具 举报

5

主题

42

帖子

1169

积分

金牌会员

Rank: 6Rank: 6

积分
1169
 楼主| 发表于 2016-11-1 16:10:49 | 显示全部楼层
阿甘 发表于 2016-11-1 12:30
很多地方都少了begin和end,特别是一个if后面有几个赋值的情况下,要用begin和end包括起来

非常感谢!。。。
回复 支持 反对

使用道具 举报

5

主题

42

帖子

1169

积分

金牌会员

Rank: 6Rank: 6

积分
1169
 楼主| 发表于 2016-11-1 16:11:30 | 显示全部楼层
锆石科技解答员 发表于 2016-11-1 14:16
建议你先学习一下硬件语法篇,先把基础语法给学习一下,这些问题就能够很好的解决了。

正在学习中。。。。
回复 支持 反对

使用道具 举报

1

主题

18

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2016-11-6 09:37:24 | 显示全部楼层
还是学习语法吧
回复 支持 反对

使用道具 举报

0

主题

26

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2016-11-17 10:04:49 | 显示全部楼层
98886666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|锆石科技社区 ( 苏ICP备15059756号  

GMT+8, 2019-5-27 11:05 , Processed in 0.143880 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表