Verilog学习 二 程序语句(一)
赋值语句
assign持续赋值语句
assign就是导线 , 被assign连接的两个变量会永远被重复着赋值
多个assign之间互不干扰 , 独立连接
always语句
always语句是条件循环语句 , 意思为 "一直 , 总是"
always @(敏感事件)begin
程序语句
end
如:
always @(a or b or d)begin
if(sel == 0)
c = a + b;
else
c = a + d;
end
当 a 或者 b 或者 c 发生变化时 , 执行依次always中的语句
注意 , 当 sel 发生变化时 , 并不会执行 if else 中的语句 , 因为敏感条件没有变化
当敏感条件过多时容易遗漏敏感条件
因此可以用 "*" 来代替
"*"指本always程序语句中所有的条件信号
always @(*) begin
代码部分
end
posedge/negedge clk作为敏感条件
posedge表示上升沿时执行 ; negedge表示下降沿时执行
上升沿指从0变为1 , 下降沿指从1变为0时执行
Q:怎么判断时钟逻辑?
A:
当clk在敏感条件且为上升/下降沿时 , 为时钟逻辑
数字表示
Verilog中最常用的数字表示方式为:<位宽>'<基数><数值> , 如4'b1011
位宽: 位数长度
基数: 表示进制方式 , b,B,d,D,o,O,h,H,大小写不区分 ,分别表示二进制 , 十进制 , 八进制 , 十六进制
缺省默认十进制
数值: 以该进制下表示的数 , 如果不足位数 , 默认高位补0
在数字表示中 , 二进制是基础
管脚: 不同芯片之间通信工具
如A芯片向B芯片发送0-3的数字 , 那么可以规定
00代表0,01代表1,10代表2,11代表3
并且和B芯片达成一致 , 从而实现数据传输
不定态和高阻态
在电路层 , 是没有不定态的 , 因为不是0就是1
因此x和z更多用来表示设计者的意图或用于仿真目的 , 告诉仿真器和综合器如何解释代码
不定态X:工具设计者不关心它的电平多少 , 是0或1都可以
但是应当尽可能减少不定态
高阻态Z:表示设计者不驱动这个信号 , 既不给0又不给1
Modelsim中 , 红色表示X , 蓝色表示Z , 绿色是单个信号 , 浅绿色是一组信号

浙公网安备 33010602011771号