精华内容
下载资源
问答
  • 偶然测试发现,当顶层模块连接两个模块用的wire变量时,最好定义在两个模块之上,不要定义在模块之间,不然发现好像定义在上面的模块无法得到这个变量,比如 wire a module A _inst0 module B _inst1 不要出现: ...

    偶然测试发现,当顶层模块连接两个模块用的wire变量时,最好定义在两个模块之上,不要定义在模块之间,不然发现好像定义在上面的模块无法得到这个变量,比如
    wire a

    module A _inst0

    module B _inst1

    不要出现:

    module A _inst0

    wire a

    module B _inst1

    展开全文
  • 参考:... ... wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。 reg型表示的...

    参考:https://blog.csdn.net/u013025203/article/details/53410715

    有关多路选择器的一篇参考:http://www.elecfans.com/d/668818.html

    wire与reg类型的区别:

    wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。

    reg型表示的寄存器类型。always模块内被赋值的信号,必须定义为reg型,代表触发器。

    默认初始值是x。

    reg 类型不一定是寄存器变量,例如组合逻辑中reg类型变量。

    reg相当于存储单元,wire相当于物理连线。

    Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同的值而引起的冲突型线型变量。z代表高阻状态或浮空量。

    线型数据包括wire,wand,wor等几种类型在被一个以上激励源驱动时,不同的线型数据有各自决定其最终值的分辨办法。

    两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动

     

    输入端口可以由net/reg驱动,但输入端口只能是net,如a = b & c,输入端口a 只能是net型,但其驱动b,c可以是net/reg型;输出端口可以使net/reg类型,输出端口只能驱动net,如a = b & c,模块的输出端口b,c可以是net/reg型,但它们驱动的a必须是net型;若输出端口在过程块(always/initial)中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为寄存器类型,只能是net类型。

     

    wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。

    不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。

    在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

    wire型的变量综合出来一般是一根导线;

    reg变量在always块中有两种情况:    always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑   always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

    在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。

     

    Notes:七七八八的也看不太懂,总之wire赋值用assign,reg在always内使用。

    ————————————————————————————————————————————————

    1、从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时:

        wire对应于连续赋值,如assign;

        reg对应于过程赋值,如always,initial;

     

    2、从综合角度,HDL语言面对的是综合器,相当于从电路角度来思考,此时:

         wire型变量综合出来一般情况下是一根导线。

         reg变量在always中有两种情况:

             (1)always @(a or b or c)形式的,即不带时钟边沿的,综合出来还是组合逻辑;

             (2)always @(posedge clk)形式的,即带有边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

     

    3、设计中,输入信号一般来说不能判断出上一级是寄存器输出还是组合逻辑输出,对于本级来说,就当成一根导线,即wire型。而输出信号则由自己来决定是reg还是组合逻辑输出,wire和reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是reg输出,这比较稳定、扇出能力好。

     

    4、Verilog中何时要定义成wire型?

        情况一:assign语句

           例如:

                   reg   a,b;

                   wire  out;

                   ......

                  assign   out = a & b;

          如果把out定义成reg型,对不起,编译器报错!

       情况二:元件实例化时必须用wire型

             例如:

              wire   dout;

             ram   u_ram

           (

            ....

           .out(dout);

           )

          wire为无逻辑连线,wire本身不带逻辑性,所以输入什么就的输出什么。所以如果用always语句对wire变量赋值,对不起,编译器报错。

          那么你可能会问,  assign    c = a & b;   不是对wire的赋值吗?

          并非如此,综合时是将  a & b综合成 a、b经过一个与门,而c是连接到与门输出线,真正综合出来的是与门&,不是c。

     

    5、何时用reg、何时用wire?

         大体来说,reg和wire类似于C、C++的变量,但若此变量要放在begin...end之内,则该变量只能是reg型;在begin...end之外,则用wire型;

         使用wire型时,必须搭配assign;reg型可以不用。

         input、output、inout预设值都是wire型。

         在Verilog中使用reg型,并不表示综合出来就是暂存器register:在组合电路中使用reg,组合后只是net;在时序电路中使用reg,合成后才是以Flip-Flop形式表示的register触发器。

     

    6、reg和wire的区别:

         reg型数据保持最后一次的赋值,而wire型数据需要持续的驱动。wire用在连续赋值语句assign中;reg用于always过程赋值语句中。

        在连续赋值语句assign中,表达式右侧的计算结果可以立即更新到表达式的左侧,可以理解为逻辑之后直接连接了一条线,这个逻辑对应于表达式的右侧,这条线对应于wire;

         在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,这个变量可以声明成reg型,根据触发条件的不同,过程语句可以建模不同的硬件结构:

        (1)如果这个条件是时钟上升沿或下降沿,那硬件模型就是一个触发器,只有是指定了always@(posedge or negedge)才是触发器。

        (2)如果这个条件是某一信号的高低电平,那这个硬件模型就是一个锁存器。

        (3)如果这个条件是赋值语句右侧任意操作数的变化,那这个硬件模型就是一个组合逻辑。

     

    7、过程赋值语句always@和连续赋值语句assign的区别:

        (1)wire型用于assign的赋值,always@块下的信号用reg型。这里的reg并不是真正的触发器,只有敏感列表内的为上升沿或下降沿触发时才综合为触发器。

        (2)另一个区别,举例:

              wire     a;

              reg      b;

             assign     a = 1'b0;

             always@(*)

                     b = 1'b0;

             上面例子仿真时a将会是0,但是b的状态是不确定的。因为Verilog规定,always@(*)中的*指的是该always块内的所有输入信号的变化为敏感列表,就是说只有当always@(*)块内输入信号发生变化,该块内描述的信号才会发生变化。

            像always@(*)  b= 1'b0; 中由于1‘b0是个常数,一直没有变化,由于b的足组合逻辑输出,所有复位时没有明确的值--即不确定状态,又因为always@(*)块内没有敏感信号变化,此时b信号一直保持不变,即不确定是啥,取决于b的初始状态。

    展开全文
  • FPGA的wire和reg类型变量

    千次阅读 2021-02-11 08:12:50
    1:wire型网络类型变量表示结构实体(如门)之间的物理连接。网络类型变量不能存储值,而且它必须要受到驱动器(如门或连续赋值语句,如assign)的驱动。如果没有驱动器连接到网络类型变量上,则该变量就是高阻的,即值为...

    1:wire型

    网络类型变量表示结构实体(如门)之间的物理连接。网络类型变量不能存储值,而且它必须要受到驱动器(如门或连续赋值语句,如assign)的驱动。如果没有驱动器连接到网络类型变量上,则该变量就是高阻的,即值为Z。常用的网络类型变量有wire和tri型。这两种网络类型变量都是用于连接器件单元。它们有相同的语法格式和功能。之所以提供wire和tri两种网络类型变量,是为了与模型中所使用的变量的实际情况一致。 wire型变量表示单个门驱动或连续赋值语句(如assign)驱动的网络型数据,tri型变量多驱动器驱动的网络类型数据。如果wire和tri型变量没有定义逻辑强度,在多驱动源的情况下,逻辑值会发生冲突,从而产生不确定值。

    wire型数据常用来表示用以assign赋值语句指定的组合逻辑信号。VERILOG程序模块中的输入、输出信号默认为wire型。wire型信号可以用作输入,也可以用作assign语句或实例元件的输出。格式如下:

    wire a; //定义一个1位的wire型变量

    wire[7:0] a;//定义一个8位的wire型变量

    wire[4:1] a;//定义了二个4位的wire型变量

    2:reg型

    寄存器是数据存储单元的抽象。寄存器数据类型的关键字是reg。通过赋值语句可以改变寄存器存储的值,其作用与触发器储存的值相当。

    reg型数据常用来表示"always"模块内的指定信号,常代表触发器。通常,在设计中要由always模块中的行为描述语句来表达逻辑关系。在always模块中内被赋值的每一个信号都必须要定义成reg型。

    reg a;//定义一个1位的reg型数据

    reg[3:0] a;//定义一个4位的reg型数据

    reg[4:1] a,b; //定义二个4位的reg型数据

    reg型数据的初始值是不确定的。reg型数据可以为正值,也可以为负值。但当一个reg型数据是表达式中的操作数据时,它的值被当作无符号数值,即正值。如reg[3:0] a被用作操作数表达式中时,-1表示+15.

    注意:reg型中表示被定义的信号将用在always模块内,理解这点很重要。并不是说reg型信号一定是寄存器或触发器的输出,虽然reg常常是寄存器或触发器的输出,但并不一定总是这样。

    展开全文
  • 在initial过程语句中赋初值时,不能对wire类型变量赋初值,能对reg,integer, real等类型变量赋初值。因为wire就是一根导线,没有存储功能。导线本身没有驱动能力,得由别的信号来驱动,它随时随着输入信号而改变。若...

    在initial过程语句中赋初值时,不能对wire类型变量赋初值,能对reg,integer, real等类型变量赋初值。因为wire就是一根导线,没有存储功能。导线本身没有驱动能力,得由别的信号来驱动,它随时随着输入信号而改变。若想给某个wire信号赋初值,在仿真初始化文件中将其连接到一个reg信号后就行了,然后对这个reg信号赋初值即可。



     

    展开全文
  • Verilog 变量声明与数据类型一 ...wire,reg ,integer,timer,real是声明变量类型的关键字。变量必须先声明后使用,声明后变量的数据类型也就确定了。变量声明是模块(module)内惟一的,不能在同一个模块或函
  • 2、从综合角度,HDL语言面对的是综合器,相当于从电路角度来思考,此时:wire变量综合出来一般情况下是一根导线。reg变量在always中有两种情况:(1)always @(a or b or c)形式的,即不带时钟边沿的,综合出...
  • 相信很多和我一样刚开始接触verilog语言的小白都会有这样的困惑,wire变量和reg型变量到底有什么区别?什么情况下使用wire定义变量、什么情况下使用reg定义变量?下面就详细分析两者在使用中的区别。 1.wire和reg...
  • wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。 reg型表示的寄存器类型。always模块内被赋值的信号,必须定义为reg型,代表触发器。默认初始值是x...
  • Verilog基本语法之wire和reg

    千次阅读 2021-04-21 16:02:29
    Verilog基本语法之wire和reg Verilog语法之多,初期学习我们只需要掌握常用的语法就OK了,今天谈谈数据类型:wire和reg ①wire:线型 ②reg:寄存器型 ...
  • Verilog语法之三:变量

    千次阅读 2020-12-28 23:50:33
    变量即在程序运行过程中其值可以改变的量,在Verilog HDL中变量的数据类型有很多种,这里只对常用的几种进行介绍。网络数据类型表示结构实体(例如门)之间的物理连接。网络类型的变量不能储存值,而且它必需受到驱动器...
  • 通过signed来标识变量(reg或wire)是否通过补码方式表征,其中值得指出的是signed标识wire变量时,wire本质上只是一些连线并无存储功能,所以当它们组合时,wire并不会产生编码逻辑(如unsigned reg连接signed wire...
  • Verilog中reg和wire的区别

    千次阅读 2020-06-21 10:14:45
    Verilog中reg和wire的区别 wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。 reg表示一定要有触发,输出才会反映输入的状态。 reg相当于存储单元,wire相当于物理连线。reg表示一定要有...
  • 比如说下面的例子: 其中top模块调用pc模块,刚开始模块调用时,可能会对传进去的实参的类型是否要与对应的形参类型相同有些疑问。...**比如说上面的例子,如果我们把top模块中的clk变量类型改为reg型的,直
  • 在Verilog里,模块内部主要有“线网(wire)”和“四态变量(reg)”两种硬件类型,它们用于描述数字电路的组合逻辑和时序逻辑。在Chisel里,也按这个思路定义了一些硬件类型,包括基本的线网和寄存器。 在verilog中我们...
  • wire.js 插件以获取电线规范中的环境变量 描述 IOC 容器的插件,用于在解析电线规范时应用环境变量的值。 该插件提供了一个getenv线工厂。 该插件仅适用于服务器环境! 安装 $ npm install --save getenv-wire ...
  • (11)Verilog HDL变量wire型 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL变量wire型 5)结语 1.2 FPGA简介 FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的...
  • 1-----使用wire变量的情况 (1)assign 语句中变量需要定义成wire型,使用wire必须搭配assign (2)模块实例化例化时候的输出必须用wire (3)input、output和inout的预设值都是wire 2-----使用wire变量的情况 ...
  • Verilog HDL(八):变量类型(reg和wire

    千次阅读 多人点赞 2020-02-28 14:20:22
    之前用到两种变量类型,一种是 wire(线型),另一种是 reg(寄存器型)。在数字电路中信号只有两种形态,一种是传输,一种是存储。传输是通过连接线, 存储是用寄存器,因此也就清楚在 Veri...
  • 首先对veriog中wire型寄存器和reg型寄存器进行了简单介绍,然后介绍了两者的区别。
  • wire与reg的区别?什么时候用wire?什么时候用reg? 简单来说硬件描述语言有两种用途:1、仿真,2、综合。 对于wire和reg,也要从这两个角度来考虑。...1、wire型的变量综合出来一般是一根导线; 2、reg变量在al
  • // 当前正在接收第几位数据 (0为起始位, 1-8为数据位, 9为停止位, 10为空闲) wire bit_sample = (counter == SYSCLK / baud_rate / 2 - 1); // 采样信号 wire bit_end = (counter == SYSCLK / baud_rate - 1); // ...
  • verilog语言中,reg型与wire型的区别

    千次阅读 多人点赞 2018-09-15 18:45:43
    对于初学者来说,首先一个大问题就是在读程序时候,变量类型reg型...在wire型相当于连线的基础上我们很容易就可以理解,当连线的来源端发生改变时,wire变量立即随之发生改变。 由此:wire型变量存在于begin...end...
  • Verilog语法_1(reg、wire、always语法)

    万次阅读 2018-06-05 18:00:51
    //例化模块的时候如果原始模块是输出信号,那么括号内必须是wire变量(正好和可综合模块相反) ); endmodule 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 例化时,变量的赋值应该...
  • FPGA笔记一 1.wire和reg基础知识: ...reg类型数据的默认值为不定值x , wire类型的变量没有连接到驱动元件上,则该变量就是高阻变量z。 输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/r...
  • FPGA中wire与reg类型的区别

    千次阅读 2018-01-17 15:29:18
    wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。  不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,225
精华内容 4,490
关键字:

wire变量