这一部分模块就是让灯大约1s亮一次但是如果把 下面标示红色的两句led_2<=8'b11111111;
led_2<=~led_2;改为led_2=8'b11111111;led_2=~led_2;灯就不会亮了,为什么?如果说这是信号的赋值符号,那为什么其余三个 led_yellow=led_yellow; led_red=led_red; led_green=led_green;就没有问题????
还有就是把@(posedge sys_clk)去掉,也不行,这又是为什么,如果去掉的话难道不是每个时钟周期去执行完一行代码吗?跟加上的区别又在哪里?
module led_2
(led_2,
led_green,
led_red,
led_yellow,
sys_clk);
output [8:1] led_2;
output led_red;
output led_green;
output led_yellow;
input sys_clk;
reg [8:1] led_2;
reg flag;
reg flag_times;
reg [27:0] delay_ms;
reg led_red;
reg led_green;
reg led_yellow;
always@(posedge sys_clk)
begin
if(delay_ms>28'd50999999)
delay_ms=28'd0;
else delay_ms=delay_ms+1;
end
always@(posedge sys_clk)
begin
led_2<=8'b11111111;
if (delay_ms==28'd50999999)
begin
led_2<=~led_2;
led_yellow=~led_yellow;
led_red=~led_red;
led_green=~led_green;
end
else
begin
led_2<=led_2;
led_yellow=led_yellow;
led_red=led_red;
led_green=led_green;
end
end
endmodule
----------------------
上面的帖子是11月18号写的,后来也没有人给出直接的回复,这两天自己仿真了一下,结果跟大家一起讨论分享。
首先为了仿真方便,我把code里的reg [27:0] delay_ms;值缩小了
直接上仿真波形,,如果led的值为0,执行取反操作后,led变为1,
可以看出,跟单片机不同的时,即使一个时钟周期下,所有的代码都会被执行到
同时发现else begin下的led<=led的赋值优先权竟然高于第一句的led<=8'b00000000;
如果将上面的程序中按照我说的,改为led=8'b00000000;led=~led;仿真结果如下图所示
可以看出,led的高电平只是持续了一个周期,执行完if (delay_ms==2'b11);后,下一个时钟沿时先去执行led=8'b00000000;(阻塞语句),然后再执行后面的语句。
但是即使有先后,也会在一个时钟周期内执行,这点跟单片机确实不一样。
再次回到我原来的问题,这一部分模块就是让灯大约1s亮一次但是如果把 下面标示红色的两句led_2<=8'b11111111;
led_2<=~led_2;改为led_2=8'b11111111;led_2=~led_2;灯就不会亮了,为什么?
其实灯只是亮了一个时钟周期,也就是20ns,人眼是不会发觉的
同时在仿真中发现,下面的这些值应该设定初始值,否则仿真不成功
这也说明芯片在实际工作时,若不设定初始值,会默认为低电平
output [8:1] led=8'b00000000;
output led_red=0;
output led_green=0;
output led_yellow=0;
reg [1:0] delay_ms=0;
状态机是数字电路基础,但并不是时序逻辑的全部,状态机往往用来做控制,不用状态机就不能实现时序逻辑设计?我觉得你还是对时序逻辑设计不够了解吧,状态机设计不过是时序设计中的一种罢了,像D触发器,移位寄存器,计数器你能说不是时序逻辑设计吗,状态机在低速的数字电路中用的比较多,但在高速数字电路设计里面很少用到,特别是通信方面,流水设计,高速数据流控制和算法设计中,状态机影响速度,真正做过高速逻辑设计的都会深有体会的。
前期不建议初学者学习状态机,并不是说状态机不重要,而是想让初学者先掌握像编码器、译码器、D触发器、移位寄存器、计数器等一些基本的数字电路后再接触状态机。
“特别是在高速数字设计中,状态机很少用到的,速度太慢!”
“前期最好不要接触状态机,不利于理解FPGA的并行操作“,这两句话不是我总结的,而是在华为有多年逻辑设计经验工程师,在给我们做培训时总结的,开始我也很不理解,后来接触高速逻辑设计方面的项目,才慢慢体会到!
前期不建议初学者学习状态机,并不是说状态机不重要,而是想让初学者先掌握像编码器、译码器、D触发器、移位寄存器、计数器等一些基本的数字电路后再接触状态机。
“特别是在高速数字设计中,状态机很少用到的,速度太慢!”
“前期最好不要接触状态机,不利于理解FPGA的并行操作“,这两句话不是我总结的,而是在华为有多年逻辑设计经验工程师,在给我们做培训时总结的,开始我也很不理解,后来接触高速逻辑设计方面的项目,才慢慢体会到!
10楼
为什么就没有关于这个问题的最直接的答案呢?
这个例子就是led灯,也就是第一个fpga实验就会接触到的例子,怎么绕过去???
这个例子就是led灯,也就是第一个fpga实验就会接触到的例子,怎么绕过去???
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |