TA的每日心情 | 怒 2017-12-13 09:01 |
---|
签到天数: 152 天 连续签到: 1 天 [LV.7]常住居民III
|
- 前几天收到了小脚丫STEP-MXO2开发板,拿到手之后发现这个板子真的是很迷你。之前看的是图片,见到实物之后才发现是如此的精致。板子的做工看起来就不错。小脚丫二代增加了板载的下载器以及一些功能外设,二代同时保持了一代的身材,板卡尺寸为52mm X 18mm,依然小巧精致(引用)。板子到手了,肯定得一番“折腾”。先上几张图看看。
板子大小就是这么大,是不是很迷你。不过板子虽小,五脏俱全。性能强悍就看怎么发挥了。
关于板子的基本介绍这里不再多说,详细可看https://www.eeboard.com/evaluation/step-mxo2gen2-2/
阻塞赋值模块代码:
module D1( input clk,input D_in, output reg D_out1,output reg D_out2);always@(posedge clk)begin D_out1 = D_in; D_out2 = D_out1; endendmodule代码很简单,2-5行是端口声明,6-10行是always语句块。我们来看一下生成的RTL图:
非阻塞赋值模块代码:
module D1( input clk,input D_in, output reg D_out1,output reg D_out2);always@(posedge clk)begin D_out1 <= D_in; D_out2 <= D_out1; endendmodule生成的RTL图:
使用非阻塞赋值生成的是两个串联的D触发器,使用阻塞赋值在Quartus里仿真是两个并联的D触发器,两个输出都是只与输入有关;
Quarturs II下阻塞赋值的RTL图
所以在lattice Diamond被综合成一个触发器了,只是引了两个输出端,和上图的输出结果是一样的。
- 通过RTL图可以看到阻塞赋值(=)语句是顺序执行的,前面的语句没有完成之前,后面的语句不能报被执行,仿佛被阻塞了一样。这种一般用于逻辑组合电路。在上面的图可以看到两个输出是同步的。
- 非阻塞赋值(<=)是并行执行的,所有赋值是在所在块语句结束之后才赋值。一般用于时序逻辑电路。而且非阻塞赋值只能用于寄存器赋值。在非阻塞赋值的RTL图可以看出D_out2输出要比D_out1落后一个时钟。
- 最后用分频器加上面的代码下载到板子上,用LED作输出,直观的的去表现。可以看到在非阻塞赋值的情况下,led2要比led1落后一个时钟。最终分频是1Hz。
非阻塞赋值测试
阻塞赋值测试
- 再上面的GIF动画中可以看到,在按下key1 按键时,阻塞赋值在时钟上升沿两个数据同时输出,也就是led同时灭;非阻塞赋值是在led1灭后led2才灭。在此之前先把两个灯都弄量。拨码开关1向下,按住key1不放。然后拨码开关1向上,再按住key1即可看到现象。
- module D1(input clk,input D_in,input reset,input clk_div_in,output reg D_out1,output reg D_out2,output reg clk_div);reg [31:0] cnt; always@(posedge clk or posedge reset)begin if(reset) begin cnt<=0; clk_div<=0; end else begin if(cnt==6000000) begin clk_div<=!clk_div; cnt<=0; end else cnt<=cnt+1; endendalways@(posedge clk_div_in)begin D_out1 <= D_in; D_out2 <= D_out1; endendmodule
- 这里说明一下为什么刚才是在按下key1才开始分频,因为在上面Verilog语句中的第8行,如果reset为1的话就复位为0,无输出,而板子上按键默认连接的是高电平。所以要按下key1使reset为0,开始分频输出。
|
|