【Day03】Verilog 资料型态(上)

资料型态

意义
0 低电位(逻辑0)
1 高电位(逻辑1)
Z 高阻抗(High Impendence )
X 未知的值((Unknow)or逻辑冲突)

连接线:wire、wand、wor

  • 没有记忆性
  • 预设值为 z
  • 将两个 wire 连在一起是不允许的
  • 若是型态为 wand/wor 则例外
    举个例子:
module test(
  a, 
  b, 
  m, 
  n
);
input a;
input b;
output m;
output n;
wand m;
wor n;
    
// wire and ---> m = a&b
assign m = a;
assign m = b;

// wire or ---> n = a|b
assign n = a;
assign n = b;

endmodule

暂存器:reg

  • 有记忆性
  • 预设值为 x (最好要初始化,通常使用 rst 或 rst_n 讯号触发初始化)
    举个例子:
module test(
  clk, 
  rst_n, 
  a, 
  b
);
input clk;
input a;
input rst_n;
output b;
reg b;
    
always@(posedge clk or negedge rst_n)begin
  if(!rst_n)b <= 1'b0;
  else      b <= a;
end
    
endmodule

到这边後,应该有些人对於 reg 与 wire 的使用不是很理解,先来解释位甚麽第二个例子需要用 reg 型态,因为变数 b 在 alwaye 内赋值,而 always 又是属於触发型电路,所以需要用暂存器储存"前态"与"次态",是不可用 wire 的(wire 没有记忆性),顺带一提,这边的 reset 如果是负缘,那我们通常会加个 _n ,让别人知道那是负缘触发,若是正缘的话则不用加,这样的 coding-style 是比较好的!!


<<:  [Day-9] if-else小练习

>>:  DAY06 - 常用的网路服务

Day32 - Windows 提权(3)-Windows Exploit Suggester

Windows Exploit Suggester Windows Exploit Suggeste...

Day 14 虚拟环境

Python虚拟环境的主要目的是为不同的Python项目创建一个彼此独立且隔离的环境。这样我们可以在...

Day20 - GitLab CI 更新 Manifest Image Tag

如何建立 Deploy Stage 在 Day15 的教学里,我们透过 Helm Chart 在 K...

Day 04 - 导入 TypeScript

如果有错误,欢迎留言指教~ Q_Q 为什麽需要 TypeScript? 是一种强型别的语言,可以主...

[Day 07] 从简单的Todolist 了解 iOS开发的大致流程之二

下面是前篇文章 ViewController的程序码,我将用注解大概解释流程以及状况 关於@obj的...