精华内容
下载资源
问答
  • Verilog中 reg和wire 用法和区别以及always和assign的区别

    万次阅读 多人点赞 2016-11-30 17:17:49
     wire对应于连续赋值,如assign;  reg对应于过程赋值,如always,initial; 2、从综合角度,HDL语言面对的是综合器,相当于从电路角度来思考,此时:  wire型变量综合出来一般情况下是一根导线。  reg变量在...

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








                   

    展开全文
  • wire对应于连续赋值,如assign;     reg对应于过程赋值,如always,initial; 2、从综合角度,HDL语言面对的是综合器,相当于从电路角度来思考,此时:      wire型变量综合...

    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

    展开全文
  • 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的初始状态。

    展开全文
  • 非常好用的总结,Verilog中-reg和wire-用法和区别以及always和assign的区别
  • 常用 1、操作符 eq,== 等于 ne,!= 不等于 gt,> 比…大 lt,< 比…小 ge,>= 大于等于 le,<= 小于等于 and,|| 且 or,&& 或 not,! 取反 2、过滤IP,过滤源IP或目的IP为x.x.x.x ...ip.dst=...

    常用
    1、操作符
    eq,== 等于
    ne,!= 不等于
    gt,> 比…大
    lt,< 比…小 ge,>= 大于等于
    le,<= 小于等于 and,|| 且 or,&& 或 not,! 取反

    2、过滤IP,过滤源IP或目的IP为x.x.x.x
    ip.addr eq x.x.x.x

    ip.src==x.x.x.x

    ip.src eq x.x.x.x

    ip.dst==x.x.x.x

    ip.dst eq x.x.x.x

    3、过滤端口
    tcp.port==8080

    tcp.srcport==8080

    tcp.dstport==8080

    4、过滤内容包含text
    http contains “text”

    5、和其他条件拼接

    http&&ip.src==x.x.x.x

    http contains “text”

    http contains “text”&&ip.src==x.x.x.x

    http.request.uri matches “text”
    http.request.uri matches “test”

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

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

    千次阅读 2011-08-05 14:58:57
    reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量...
  • reg相当于存储单元,wire相当于物理连线Verilog中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是...
  • 来源:http://apps.hi.baidu.com/share/detail/22828402 ... reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位...
  • ├─demo1 基本用法 ├─demo2 接口绑定 ├─demo3 结构体值注入 └─demo4 对错误的处理 使用说明 安装wire命令 go get github.com/google/wire/cmd/wire 这个只需要安装一次就可以了,没必要为每个项目都安装一...
  • Verilog中assign的用法

    千次阅读 2017-09-22 16:39:52
    assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出... (3)对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用
  • verilog -:或+:用法

    千次阅读 2020-03-16 12:15:29
    最近在刷一些Verilog的题,希望...这里的MSB 和LSB 都需要是常数而不能是变量,那么现实中很有可能需要对变量来进行操作,比如多路选择器等等,那么就可以用到 -:和+:操作符了,具体用法如下: module top_modul...
  • verilog系统函数用法

    2014-09-22 19:54:00
    1、$fwrite 向文件写入数据 $fdisplay 格式:$fwrite(fid,"%h%h\n",dout_r1,dout_r2); (1)fwrite是需要触发条件的,在一次触发条件之后也不会自动发生换行,所以...wire [27:0] data; fp_re = $fopen("dout...
  • 阻塞和非阻塞复制总是容易把人绕晕,已经使用Verilog编程一段时间了,现在终于感觉清楚了一点阻塞和非阻塞赋值的具体规则: ...assign语句只能描述组合逻辑,被赋值变量为wire型,赋值使用阻塞赋值 “=”; ...
  • 【转自风吹过的时光】 Wireshark 基本语法,基本使用方法,及包过虑规则: 1.过滤IP,如来源IP或者目标IP等于某个IP ...ip.srceq192.168.1.107orip.dsteq192.168.1.107 ...linux上运行的wire...
  • 原标题:基于STM32的多种printf用法,你都知道吗?在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。如果你的UART串口不够用,还要用printf,此时该怎么办?方法其实是有...
  • 语法定义 在Verilog2001以后,Verilog支持在范围中是用变量,并且引入心得语法如下: [<base_index> + : bit_width] //由低位到高位 [<base_index> - : bit_width] //由高位到低位 ... wire [2:0
  • 什么是WiresharkWireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据包,并为用户提供关于网络和上层协议的各种信息,并尝试显示包尽可能详细的情况。与很多其他网络工具一样,...Wire...
  • case:在case语句中,敏感表达式与各项值之间的比较,是一种全等比较。每一位都必须相同才认为匹配。 casez:这种也可用于优先级电路。    ... input wire a,b,c,d;input wire [...
  • for语句 for循环可以搭配generate块使用,框架如下: genvar i; generate for(i=0; i<...1、当定义wire型变量时,内部必须使用assign赋值; 2、当定义reg型变量时,可直接=赋值。 module mult
  • 在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,...SWO:Serial Wire Output,串行线输出SWD:Serial Wire Viewer,串行线查看器一、常见printf输出1.UART打印这种使用UART串口输出,需要占用一...
  • 原文出处: EMC中文支持论坛  按照国际惯例,从最基本的说起。 抓取报文: 下载和安装好Wireshark之后,启动Wireshark并且在接口列表中选择接口名,然后开始在此接口上抓包。例如,如果想要在无线...Wire
  • //测试平台`timescale 1ns/1ps module tb(); reg clk; reg clk4; reg por; reg din_100; reg din_10; reg rx_en; wire din_w; wire din; wire din_100_en;
  • 介绍如何定义Wire/Reg/Memory/Prim。 1. DefWire ...Wire()表明内括的Data的容器为线,用法为: ​​ Wire()定义如下: ​​ a. 获取一个t的克隆x; b. 定义一个Definition, 即为DefWire:De...
  • 数据类型

    2019-09-02 22:19:05
    tri:至于tri其实和wire用法上是一模一样的,不过有时候,我们需要定义一些会被三态门驱动的硬件连线,用tri来命名会让代码更具有可读性,让人一看就知道这根连线上会出现Z状态。 ...
  • verilog 数据类型

    2019-09-05 18:07:50
    至于tri其实和wire用法上是一模一样的,不过有时候,我们需要定义一些会被三态门驱动的硬件连线,用tri来命名会让代码更具有可读性,让人一看就知道这根连线上会出现Z状态,仅此而已! 2、wor与trior:or的含义在...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

wire用法