php 网站建设方案,怎么搜索网站,上海电子商城网站制作,想在土巴兔做装修网站找谁wire类型就是一根线#xff0c;线有两端#xff0c;一端发生改变#xff0c;经过线传递的信号当然也会发生改变#xff0c;reg类型则不同#xff0c;可以把reg类型理解为存储数据的寄存器#xff0c;当满足一定条件时#xff0c;数值才被激活发生改变。
那么#xff0… wire类型就是一根线线有两端一端发生改变经过线传递的信号当然也会发生改变reg类型则不同可以把reg类型理解为存储数据的寄存器当满足一定条件时数值才被激活发生改变。
那么信号和输入输出端口何时用wire类型何时使用reg类型呢请看下图 首先介绍一下模块的内部和外部见代码
module led_breath(//模块外部input wire rst_n,input wire clk,output reg led);//模块内部reg [15:0] timer [2:0];reg [1:0] breath_type;endmodule输入输出input output端口常定义于模块的外部我认为是额外定义的即input output端口也属于信号用于和其他模块交互最终需要我们配置相关的约束文件将引脚和他们相连进而运行代码。在括号之外的属于模块的内部的信号属于模块的内部逻辑实现部分。 所以对于模块内部来说端口定义为wire或reg信号就比较好理解我认为就可以把它们看作是变量wire类型就是需要一次次assign赋值例如说规定了呼吸灯闪烁的频率为 wire 类型等于1/Treg类型就是在always循环中自动赋值例如说reg类型计时器当每次时钟翻转的时候激活使加一。 这也是很多教程所说的连续赋值例如assign是wire类型过程赋值例如always是reg类型 那么对于模块外部来说input端口不是模块能改变的只能接收外部引脚的输入所以只能定义为wire类型对于output端口来说模块可以让信号经过内部不同的操作之后输出自己想要的值所以可以定义为wire或reg类型原理类似于模块内部的wire和reg类型。 可以尝试着看以下代码因为需要output端口的信号在模块中的操作不同所以定义的wire/reg类型也就可以不同。
module example_module(input [3:0] a, // 输入端口隐含 wire 类型input [3:0] b, // 输入端口隐含 wire 类型output reg [3:0] sum, // 输出端口定义为 reg 类型因为它在 always 块中被赋值output wire carry // 输出端口定义为 wire 类型因为它是通过 assign 驱动的
);// 内部信号wire [4:0] result; // result 是一个内部信号用于存储加法结果// 组合逻辑assign result a b;// 时序逻辑用于生成 sumalways (*) beginsum result[3:0]; // 在 always 块中赋值sum 必须是 reg 类型end// 组合逻辑生成 carryassign carry result[4]; // carry 是通过 assign 语句赋值因此是 wire 类型endmodule总的来说在模块内部需要进行什么样的操作就定义什么类型的信号wire/reg在模块外部定于input端口就使用wire类型定义ouput端口原理类似于模块内部根据信号的操作定义wire或者reg信号。 本文权当记录自己对于verilog中wire类型和reg类型的理解。如有错误请一定指出感谢阅读。