精华内容
下载资源
问答
  • 1、从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时:     wire对应于连续赋值,如assign;     reg对应于过程赋值,如always,initial; 2、从综合角度,HDL语言...

    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的初始状态。








                   

    转载:https://blog.csdn.net/u013025203/article/details/53410715

    展开全文
  • Verilog中 reg和wire 用法和区别以及always和assign的区别

    万次阅读 多人点赞 2016-11-30 17:17:49
    1、从仿真角度来说,HDL语言面对的是编译器如modelsim,相当于使用软件思路,此时:  wire对应于连续赋值,如assign;  reg对应于过程赋值,如always,initial; 2、从综合角度,HDL语言面对的是综合器,相当于...

    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的初始状态。








                   

    展开全文
  • 非常好用的总结,Verilog中-reg和wire-用法和区别以及always和assign的区别
  • Verilog基本语法之wire和reg

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

     

           Verilog语法之多,初期学习只需要掌握常用的语法就OK了,基本就可以用Verilog HDL语言去描述逻辑电路了,今天学习两种数据类型:wire和reg。在数字电路中信号只有两种形态,一种是传输,通过线wire),一种是存储,通过寄存器(reg)。因此,也就清楚wire和reg变量在Verilog HDL中的重要性了。下图是wire和reg变量的模型。

                                                                                        

            (1)wire(线型)变量:

            ①在物理结构上只是一根线,在Verilog HDL描述时,对线型变量赋值用assign即可,相对比较简单。

            wire是最常用的net型数据变量,net型数据相当于硬件电路中的各种物理连接,其特点是输出的值随输入值的变化而变化。net 型数据的值取决于驱动的值,对net型变量有两种驱动方式,一种方式是在结构描述中将其连接到一个门元件或模块的输出端;另一种方式是用持续赋值语句assign对其进行赋值。如果net型变量没有连接到驱动,则其值为高阻态z (trireg 除外)。Verilog 模块中的输入/输出信号在没有明确指定数据类型时都被默认为wire型。

    常用net型变量

    类型

    功能

    可综合性

    wire,tri

    连线类型

    wor, trior

    具有线或特性的多重驱动连线 

     

    wand, triand

    具有线与特性的多重驱动连线

     

    tril, tri0

    分别为上拉电阻和下拉电阻

     

    supply1, supply0

    分别为电源(逻辑1)和地(逻辑0)

    trireg

    具有电荷保持作用的连线,可用于电容的建模

     

             wire型变量定义:①wire a,b;                               //声明2个wire型变量a和b(一位)

                                             ②wire[7:0]  databus;               //databus(数据总线)的宽度是8位

                                                wire[19:0] addrbus;             //addrbus(地址总线)的宽度是20位                 

            (2)reg(寄存器型)变量:

            ①在物理结构上相对比较麻烦,左端有一个输入端口 D,右端有一个输出端口 Q, 并且 reg 型存储数据需要在CLK(时钟)沿的控制下完成,在 Verilog HDL 描述时也相对麻烦。在对reg 型变量进行赋值时,必须在 always 块内完成。

            reg型变量是最常用的variable型变量,variable型变量必须放在过程语句(如initial、 always) 中,通过过程赋值语句赋值;在always、initial等过程块内被赋值的信号也必须定义成variable型。variable型变量(reg)并不意味着一定对应着硬件上的一个触发器或寄存器等存储元件,在综合器进行综合时,综合器会根据具体情况确定是映射成连线还是映射为存储元件(触发器或寄存器)。

    常用variable型变量

    类型

    功能

    可综合性

    reg

    常用寄存器型变量

    integer

    32位带符号整型变量

    real

    64位带符号实型变量

     

    time

    64位无符号时间变量

     

           wire型变量定义:①reg a,b;                               //声明2个reg型变量a和b(一位)

                                           ②reg[7:0]  out;                      //out的宽度是8位

     

    部分转载:https://mp.weixin.qq.com/s/OBAFOS4az8Wc6_OPxIRrOw

     

       

     

                                           

                                                                

     

    展开全文
  • verilog中reg和wire类型的区别和用法

    万次阅读 多人点赞 2018-06-11 10:05:16
    reg相当于存储单元,wire相当于物理连线Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是...

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

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

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

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

    输入端口可以由net/reg驱动,但输入端口只能是net;输出端口可以使net/reg类型,输出端口只能驱动net;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型
    用关键词inout声明一个双向端口, inout端口不能声明为寄存器类型,只能是net类型。

    ***************************************************************************************************************************************************

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

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

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

            输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型;输入和双向端口不能声明为寄存器类型。

           简单来说硬件描述语言有两种用途:1、仿真,2、综合。

    对于wire和reg,也要从这两个角度来考虑。


    *********************************************************************************
    从仿真的角度来说,HDL语言面对的是编译器(如Modelsim等),相当于软件思路。
    这时:
    wire对应于连续赋值,如assign
    reg对应于过程赋值,如always,initial

    *********************************************************************************
    从综合的角度来说,HDL语言面对的是综合器(如DC等),要从电路的角度来考虑。
    这时:
    1、wire型的变量综合出来一般是一根导线;
    2、reg变量在always块中有两种情况:
    (1)、always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑
    (2)、always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

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

    展开全文
  • reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是...
  • VHDL中的wire和reg赋值

    千次阅读 2020-11-25 19:32:57
    参考: 链接1 链接2 先捋一下wire和reg的区别: 1、wire表示直通,即只要输入有变化,输出马上无条件地反映; 2、reg表示一定要有触发,输出才会反映输入。 直接定义输入输出的时候,默认为1位wire类型。比如: ...
  • Verilog中wire与reg的使用

    千次阅读 2017-09-22 14:55:14
    wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。 reg表示一定要有触发,输出才会反映输入的状态。 reg相当于存储单元,wire相当于物理连线。...wire使用在连续赋值语句中,而
  • Golang依赖注入框架wire使用详解

    千次阅读 2020-09-24 16:23:02
    What is wire? wire是google开源的依赖注入框架。或者引用官方的话来说:“Wire is a code generation ...除了wire,Go的依赖注入框架还有Uber的dig和Facebook的inject,它们都是使用反射机制来实现运行时依赖注入(r
  • 现代协作可满足最高级的安全性和卓越的用户体验。 Wire提供了最全面的协作套件,其中包括Messenger,...Wire的安全云协作解决方案可在多种部署选项中使用,为组织提供了一种在云,私有云或本地中部署该技术的方法
  • Verilog中关于wire使用的一些小知识

    千次阅读 2018-04-14 18:52:00
    1.Verilog中如果wire连接到常量,而常量没有说明他的位宽,那么将会默认为32位  如: input [3:0] x ; wire [3:0] a; assign a = 3 + x;  上述代码在综合的时候,会将a扩展成32位进行操作,而事先声明...
  • 不论是多机通信,还是一个主控板控制多个传感器,我们都会遇到串口通信和IIC通信,本节主要详细介绍IIC总线构成,以及如何通过Wire类库的成员函数,实现多个设备之间的通信。
  • 使用google wire解决依赖注入 google wire是golang的一个依赖注入解决的工具,这个工具能够自动生成类的依赖关系。 实例 package main import ( "fmt" "time" ) // 采集函数 type F func() // 采集对象 type ...
  • 用法wire.js 规范中注册插件 "$plugins" : [ { "module" : "getenv-wire" } ] 在规范中应用getenv工厂 简写 "property" : { "getenv" : "VARIABLE" } 带有可选默认值的长格式 "property" : { "getenv" : ...
  • 用法 首先,运行以下命令安装软件包 pip install Flask-Wire 现在,让我们编写一个简单的Flask应用程序,以演示实际的扩展。 app.py import time from flask import Flask , render_template_string from flask_...
  • 使用 Square 的 Wire 库自动构建 protobuf 类的 Gradle 插件。 这是一个临时回购。 它是插件实现的直接副本,将“很快”合并到官方 Wire 存储库中。 我们想“早点”使用这个,所以我们来了。 在这里托管它的目的是...
  • Wire protocol buffers的好处 轻量级的protocol buffers,针对移动设备的java库。 (和protoc产生的代码相比较)由Wire生成的代码方法数量将大大减少,这将有助于android...使用准备:1 在gradle里引入依赖的wire-runtime
  • 今日说“法”:如何防止reg、wire型信号在使用逻辑分析仪时被优化 欢迎大侠来到FPGA技术江湖新栏目今日说“法”,当然,在这里我们肯定不是去研究讨论法律法规知识,那我们讨论什么呢,在这里我们讨论的是产品研发...
  • Go 每日一库之 wire

    2020-03-03 00:04:12
    读了这篇文章后,@overtalk推荐了 Google 开源的wire工具。所以就有了今天这篇文章,感谢推荐???? wire是 Google 开源的一个依赖注入工具。它是一个代码生成器,并不是一个框架。我们只需要在一个特殊的go文件中告诉...
  • go 依赖注入工具( go-wire使用(二 用户指南) wire 有两个核心概念: 提供者与注入者 提供者providers providers 是一个能够返回值的方法: package foobarbaz type Foo struct { X int } func ProvideFoo() ...
  • google/wire 是 Go 语言的编译时依赖注入框架,与 Spring IoC 一样,wire 的目的也是让开发者从对项目中大量依赖的创建和管理中解脱出来,但两者在实现方式上有着很大的不同。 Go 中的依赖注入 在 Go 中,我们通常...
  • verilog中wire和reg类型的区别

    千次阅读 2020-09-21 21:41:33
    一、基本概念 wire型数据常用来表示以assign关键字指定的组合...1、从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时: wire对应于连续赋值,如assign; reg对应于过程赋值,如always,initial;
  • 将verilog中的wire和reg型数据相连接
  • 用法示例: ------------------- % 使用附加库创建 arduino 对象a = arduino('COM38', 'Uno', 'Libraries', 'PaulStoffregen/OneWire'); % 创建 1-Wire 对象sensor = addon(a, 'PaulStoffregen/OneWire'); % 获取...
  • esp32-owb 这是Maxim Integrated“ 1-Wire”协议的ESP32兼容C组件。 使用xtensa-esp32-elf工具链(gcc版本5.2.0,crosstool-ng-1.22.0-80-g6c4433a)针对环境的3.0-... 最初的实现使用CPU延迟来构造1-Wire读/写时隙
  • wire与依赖注入 Wire 是一个的Golang依赖注入工具,通过自动生成代码的方式在编译期完成依赖注入,Java体系中最出名的Spring框架采用运行时注入,个人认为这是wire和其他依赖注入最大的不同之处。 依赖注入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,555
精华内容 8,222
关键字:

wire用法