led小灯点亮
实验目的:实现一个即按即亮的小灯控制模型。
控制框图与波形图:
实验代码:没有使用到时钟输入,采用逻辑电路赋值达到没有延时的即按即亮。
非/阻塞赋值
assign led_out = key_in
在逻辑赋值中 使用阻塞赋值:赋值语句立即执行,执行完毕后才执行下一条语句(即为阻塞的含义,依次顺序执行),用于建立组合逻辑模型
非阻塞赋值:先计算语句右侧的值,但不立即赋值给左边,等待always语块结束后才完成赋值。时序电路或锁存器时,使用<=
同一个always块中不要既用非阻塞赋值又用阻塞赋值。每个always语句块都隐含表示一个独立的逻辑电路模块,因此对于特定的reg类型的变量,只能在一个always语句块中对其进行赋值,否则就可能会出现两个硬件模块同时从同一个输出端口输出数据的情况(短路输出)。
位于begin/end块内的多条阻塞赋值=
是串行执行的,。但是多条非阻塞赋值语句是并行执行的,这些非阻塞赋值语句都会在其中任何一条语句执行完成之前开始执行。
wire型与reg型
-
wire:wire本质是一条没有逻辑的连线,wire型数据常用来表示以assign关键字指定的组合逻辑信号,模块的输入输出类型都默认为wire型,wire相当于物理连线,默认初始值是z(高阻态)。
-
reg:reg型表示的寄存器类型,用于always模块内被赋值的信号,必须定义为reg型,代表触发器,常用于时序逻辑电路,reg相当于存储单元,默认初始值为x(未知状态)。
随机生成1或0
always #10 key_in<={$random}%2;