原创 verilog版的交通信号灯 延迟

2008-7-24 17:43 6064 12 13 分类: FPGA/CPLD
初学FPGA,由于有C语言基础,直接学习verilog会快些,
学习用书《Verilog HDL 数字设计与综合》第二版---夏宇闻著

在看到7.9.3节时,书中讲了一个简化版式的交通信号灯实例,
就照着意思在ISE平台上输入了整个源码,并进行仿真,

思想基本OK,如果只是学习verilog,已基本结束,但我想把实例综合一下,
发现始终报错,出错的地方为: repeat (`Y2RDELAY) @(posedge clock);

发现延迟不可被综合,可实例中又要用到这个功能,我就开始研究如何才能延迟,
最后实现思想如下:(利用case结构实现单级延迟,)
                case (stateChgDelay) // @(posedge clock)
                  DELAY0: ;               
                  DELAY1: stateChgDelay = DELAY0;
                  DELAY2: stateChgDelay = DELAY1;
                  DELAY3: stateChgDelay = DELAY2;
                  DELAY4: stateChgDelay = DELAY3;
                  DELAY5: stateChgDelay = DELAY4;
                  DELAY6: stateChgDelay = DELAY5;
                  default: stateChgDelay = DELAY0;
                endcase
对于任意延迟,再定义一个     reg [3:0] stateSetDelay;
设置stateSetDelay值为要等待的时间,并将上述结构进行变形,
变形后如下:
                case (stateChgDelay)
                  DELAY0: begin
                            case(stateSetDelay)
                                  DELAY0: ;
                                  DELAY1: stateChgDelay = DELAY1;
                                  DELAY2: stateChgDelay = DELAY2;
                                  DELAY3: stateChgDelay = DELAY3;
                                  DELAY4: stateChgDelay = DELAY4;
                                  DELAY5: stateChgDelay = DELAY5;              
                                  DELAY6: stateChgDelay = DELAY6;
                                  default:;                                 
                                endcase
                            end                 
                  DELAY1: stateChgDelay = DELAY0;
                  DELAY2: stateChgDelay = DELAY1;
                  DELAY3: stateChgDelay = DELAY2;
                  DELAY4: stateChgDelay = DELAY3;
                  DELAY5: stateChgDelay = DELAY4;
                  DELAY6: stateChgDelay = DELAY5;
                  default: stateChgDelay = DELAY0;
                endcase
这样即可实现想要的延迟,
附参数定义:
    parameter DELAY0 = 4'd0,
               DELAY1 = 4'd1,
               DELAY2 = 4'd2,
               DELAY3 = 4'd3,
               DELAY4 = 4'd4,
               DELAY5 = 4'd5,
               DELAY6 = 4'd6;

文章评论1条评论)

登录后参与讨论

ilove314_323192455 2008-7-24 18:24

liudian
相关推荐阅读
walnutcy_696810119 2012-11-21 08:37
Linux下使用smartCOM调试串口
在Windows下的串口调试一直使用sscom,在Linux下只找到一个cutecom,用了几次,很不喜欢,就着手开发了一款自己的串口调试工具,smartCOM。 smartCOM介绍:http...
walnutcy_696810119 2012-03-29 18:12
【博客大赛】原创--测量基础:什么是测量
写在正文之前: 适逢EDNChina搞活动,而我本人也算在测量业工作,就一起作下笔记吧。若有错误,请大家一起斧正。笔者写本文一方面是梳理知识,另一方面也希望与大家探讨有关测量的知识、应用等,希...
walnutcy_696810119 2011-12-20 18:29
GLONASS 15年来,首次实现24颗星在轨可用
  EDN的博客改版后,不太好用,在SINA重开一个,不过重点改为关注GNSS行业新闻 http://blog.sina.com.cn/s/blog_7420cd1701012en9....
walnutcy_696810119 2011-12-20 17:49
逆向工程第一步:通信协议分析
工程中常有这样的事,想分析下其他知名公司产品中的通信协议,以便生产设计兼容产品。 1) 逆向工程,首先要了解产品,知己知彼,百战不怠;     去年受命想仿一款GARMIN的导航盒,但无法...
walnutcy_696810119 2011-11-14 11:30
通用代码调试方法 (Keil, VCC)
调试代码一般需要定位问题,这里给出一个解决方案, 一般的编译器均支持这些宏指令。   #define DEBUG_WALT_1113     1 extern void log_t...
我要评论
1
12
关闭 站长推荐上一条 /2 下一条