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 , 绿色是单个信号 , 浅绿色是一组信号

posted @ 2025-04-07 23:24  Guaninf  阅读(26)  评论(0)    收藏  举报