求大神指导:去掉assign 延时赋值连续赋值语句,只用always过程语句来描述

FPGA/CPLD-行为描述语句&连续性赋值&过程性赋值
模块的几种描述方式(或者叫做建模方式),包括行为级建模(RTL级建模也属于行为级建模)、结构级建模(包括门级建模和开关级建模)以及行为级和结构级的混合建模。当模块内部只包括过程块和连续赋值语句(assign),而不包含模块实例(模块调用)语句和基本元件实例语句时,就称该模块使用的是行为级建模;当模块内部只包含模块实例和基本元件实例语句,而不包含过程块语句和连续赋值语句时,就称该模块采用的是结构级建模;当然在模块内部也可以采用这两种建模方式的结合,即混合建模方式。
使用连续性赋值语句assign,所有右值都是敏感信号,当左值发生变化时,计算表达式的值,并将结果传给左值,具有组合电路的特性,输入变化,输出立即变化。
与initial语句相反,always语句重复执行。与initial语句类似,always语句语法如下:
always @(敏感信号表达式)
//过程赋值
//if-else,case 语句
//while,repeat,for 循环语句
//task,function 调用
always语句有一个过程性赋值。因为always语句重复执行,并且在此例中没有延时控制,过程语句将在0时刻无限循环。因此,always语句的执行必须带有某种时序控制。
摘录于论坛:
always@(*)触发条件是什么?
有看到代码这样写的,触发条件是任意吗,这样的代码能综合吗,有什么缺点?
触发条件是这个always块中的任何一个变量发生变化,可以防止敏感列表不全引起的错误。
可以综合,会生成一块组合逻辑。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置: >>
第四章 Verilog HDL行为语句
芜湖职业技术学院第4章 Verilog HDL行为语句?赋值语句(assign、=、&=) ?条件语句(if-else、case) ?循环语句(for、forever、repeat、while) ?过程语句(initial、always) ?块语句(begin-end、fork-join) 芜湖职业技术学院本章概述本章介绍Verilog HDL的行为语句,要充分 理解硬件描述语言和硬件电路的关系,熟练掌 握常用的行为语句,基本的行为语句就可以完 成绝大多数电路与系统设计,要对常用语句用 心专研、深入理解,对完成硬件电路设计将是 非常有用的。 芜湖职业技术学院4.1 赋值语句Verilog HDL赋值语句包括连续赋值语句和过程赋值语 句两种。1. 连续赋值语句 数据流的描述是采用连续赋值语句 (assign )语句来实现的,语法如下: assign net_type=表达式;连续赋值语句用于组合逻辑的建模。等式左边是wire类 型的变量,等式右边可以是常量,或是由运算符如逻辑运 算符、算术运算符参与的表达。例如, wire [3:0] Z, Preset, C //线网说明 assign Z = Preset & C //连续赋值语句 芜湖职业技术学院 注意两个方面的问题: (1)连续赋值语句的执行是:只要右边表达式任一个变量有 变化,表达式立即被计算,计算的结果立即赋给左边信号。 (2)连续赋值语句之间是并行语句,因此与位置顺序无关。2. 过程赋值语句过程赋值语句多用于对reg型变量进行赋值。过程赋 值有阻塞赋值和非阻塞赋值两种方式。阻塞语句是顺序 执行的,在该语句结束时就立即完成赋值,那么在前面 的语句没有完成之前,后面的就不能被执行,仿佛被阻 塞了一样,常用于组合逻辑电路设计中;而非阻塞语句 是同时执行的,在整个过程块结束时才完成赋值操作, 即被赋值的变量的值不是立刻就改变的,常用于时序逻 辑电路设计中。 芜湖职业技术学院?阻塞赋值阻塞赋值语句,从字面上理解,该条语句阻塞了下 面语句的执行,“=”用于阻塞的赋值,凡是在组合 逻辑(如在assign语句中)赋值的请用阻塞赋值。?非阻塞赋值非阻塞赋值操作符用小于等于号(即&=)表示,只 能用于对寄存器类型变量进行赋值,因此只能用在 “initial ”和“always”等过程块中,不能用在 assign语句中。注:在同一个进程块中,最好不要同时用阻塞赋值和非阻 塞赋值语句。 芜湖职业技术学院4.2 条件语句条件语句有if-else语句和case语句两种,它们都是 顺序语句,应放在always块内。1. if-else语句格式与C语言中的if-else语句类似,使用方法有三种:(1)If(表达式) 语句1; (2)If(表达式) 语句1; else 语句2;(3)if(条件表达式1) 语句1; else if (条件表达式2) 语句2; else if (条件表达式3) 语句3; …… else 语句n; 芜湖职业技术学院 例如 if(Sum & 60) begin Grade = C; Total_C = Total _c + 1; end else if(Sum & 75) begin Grade = B; Total_B = Total_B + 1; end else begin Grade = A; Total_A = Total_A + 1; end“表达式”一般为逻辑表 达式或关系表达式,也 可能是一位的变量。条 件表达式必须总是被括 起来的。对表达式的值 进行判断,若为0, x或z, 按“假”处理;若为1, 按“真”处理,执行指 定语句。 芜湖职业技术学院2. case语句相对于if语句只有两个分支而言,case语句是一种多 分支语句,故case语句可用于多条件译码电路,如:描述 译码器、数据选择器、状态机及微处理器的指令译码等。 case语句的使用格式:case (敏感表达式)值1: 语句1;值2: 语句2; ……当敏感表达式的值为值 1时,执行语句1;为n时执 行语句n;如果敏感表达式 的值与列出的值都不相同 的话,则执行default后面 的语句。 建议:case的默认项必须写, 防止产生锁存器。值n: 语句n;default:语句n+1; endcase 芜湖职业技术学院例如begin case (HEX) 4'b0001 : LED = 7'b1111001; // 1 4'b0010: LED = 7'b0100100; // 2 4'b0011: LED = 7'b0110000; // 3 4'b0100: LED = 7'b0011001; // 4 4'b0101: LED = 7'b0010010; // 5 4'b0110: LED = 7'b0000010; // 6 4'b0111: LED = 7'b1111000; // 7 4'b1000: LED = 7'b0000000; // 8 4'b1001: LED = 7'b0010000; // 9 4'b1010: LED = 7'b0001000; // A 4'b1011: LED = 7'b0000011; // B 4'b1100: LED = 7'b1000110; // C 4'b1101: LED = 7'b0100001; // D 4'b1110: LED = 7'b0000110; // E 4'b1111: LED = 7'b0001110; // F default :LED = 7'b1000000; // 0 Endcase 芜湖职业技术学院3. 条件语句使用要点在使用条件语句时,应注意列出所有条件分支,否则,编译器认为条 件不满足时,会引起一个触发器保持原值。这一点可用于设计时序电路, 例如在计数器设计中,条件满足则加1,否则保持不变;而在组合电路设计 中,应避免这种隐含触发器的存在。当然,一般不可能列出所有分支,因 为每一变量至少有4种取值0、1、z、x。为包含所有分支,可在if语句最后 加上else;在case语句的最后加上default语句。设计者原意是设计一个二输 入与门,但因if语句中无else 语句,在逻辑综合时会认为 else语句为:“c=c”,即保持 不变,形成了一个隐含锁存 器。因此需要加一条语句:else c=0; 芜湖职业技术学院4.3 循环语句在Verilog HDL中存在4种类型的循环语句,可用来控 制语句执行次数。这4种语句分别为: (1)forever:连续地执行语句,多用在“initial”块中,以生 成时钟等周期性波形。(2)repeat:连续执行一条语句n次; (3)while:执行一条语句,直到某个条件不满足; (4)for:有条件的循环语句 芜湖职业技术学院1. for语句for语句使用格式: for(表达式1;表达式2;表达式3) 语句; 即: for(循环变量赋初值;循环结束条件;循环变量增 值) 执行语句;2. repeat语句repeat语句的使用格式为:repeat(循环次数表达式) 语句;或repeat(循环次数表达式) begin ……end 芜湖职业技术学院3. while 和forever语句?While语句while语句的使用格式如下: while(循环执行条件表达式)语句; 或 while(循环执行条件表达式)begin……endwhile语句在执行时,首先判断循环执行条件表达式是否 为真,若为真,执行后面的语句或语句块,然后再回头判断循 环执行条件表达式是否为真,为真的话,再执行一遍后面的语 句,如此不断,直到条件表达式不为真。因此,在执行语句中, 必须有一条改变循环执行条件表达式的值的语句。 芜湖职业技术学院?forever语句forever语句的使用格式如下:forever或 forever语句;begin …… endforever循环语句连续不断地执行后面的语句或语句块,常 用来产生周期性的波形,作为仿真激励信号for语句一般用在 initial过程语句中,若要用它来进行模块描述,可用disable语 句进行中断。 芜湖职业技术学院 举例:3个分别用for、repeat、while语句实现的同一个循环 芜湖职业技术学院 应用举例:采用for循环语句设计一个“七人表决 器”,通过一个for循环语句统计赞成人数,若超过4人 赞成则通过。 芜湖职业技术学院用vote[6:0]表示7个人的投票情况,“1”代表赞成, 即vote[i]为第“1”代表第i个赞成,pass=“1”表示表决 通过 芜湖职业技术学院4.4 过程语句Verilog HDL中的多数过程模块都从属于以下2种过程语句:?initial ?always在一个模块中,使用always和initial语句的次数是不 受限制的。Initial语句常用于仿真中的初始化,initial过程 块中的语句仅执行一次;always块内的语句则是不断重复 执行的。Always过程语句是可综合的,在综合的电路设 计中广泛采用。 芜湖职业技术学院1. always过程语句always过程语句使用模板如下:always @(&敏感信号表达式event-expression&)begin //过程赋值 //if-else,case选择语句 //while,repeat,for循环//task,function调用end 芜湖职业技术学院 “always”过程语句通常是带有触发条件的,触发条件写 在敏感信号表达式中,只有当触发条件满足时,其后的 “begin-end”块语句才能被执行。下面讨论敏感信号表达 式“event-expression”的含义以及如何写敏感信号表达式。?敏感信号表达式所谓敏感信号表达式,又称事件表达式或敏感信号列 表,即当该表达式中变量的值改变时,就会引发块内语句 的 执行。因此,敏感信号表达式中应列出影响块内取值 的所有信号。若有两个或两个以上信号,它们之间用“or” 连接。 芜湖职业技术学院 例如: @(a) @(a or b) @(posedge clock) @(negedge clock) //当信号a值发生改变时 //当信号a或信号b的值发生改变时 //当clock的上升沿到来时 //当clock的下降沿到来时@(posedge clk or negedge reset) //当clk的上升沿到来或//reset信号的下降沿到来时 敏感信号可以分为两种类型:一种为边沿敏感型,一 种为电平敏感型。每一个always过程最好只由一种类型的 敏感信号来触发,而不要将边沿敏感型和电平敏感型列在 一起。 芜湖职业技术学院 例如: always @(posedge clk or posedge clr) //两个敏感信号都是边沿敏感型 always @(a or b) //两个敏感信号都是电平敏感型 always @(posedge clk or clr) //不建议这样用,最好不要将边沿敏感型和电平//敏感型列在一起 芜湖职业技术学院?同步和异步操作对于时序电路,事件通常是由时钟边沿触发的。为表达边沿这个概 念,Verilog HDL 提供了posedge和negedge两个关键字来进行描述。 根据过程语句中表述方式不同, 可实现信号的同步操作和异步操作。此为同 步置数, 同步清 零的例 子 芜湖职业技术学院对于上例中的load、reset信号没有写在敏感信号表达式当 中,他们是同步置数、同步清零,这些信号要起作用,必须有 时钟的上升沿到来。对于异步的清零/置数,应按以下格式书写 敏感信号表达式。 always @(posedge clk or posedge clear) //clear信号上升沿到来时清零,故高电平清零有效 always @(posedge clk or negedge clear) //clear信号下降沿到来时清零,故低电平清零有效注:块内的逻辑描述要与敏感信号表达式中信号的 有效电平一致。例如: 芜湖职业技术学院?用always过程块实现较复杂的组合逻辑电路always过程语句通常用来对寄存器类型的数据进行 赋值,但always过程语句也可以用来设计组合逻辑。在 有的情况下,使用assign来实现组合逻辑电路,很多地 方会显得冗长且效率低下,而适当地采用always过程语 句来设计组合逻辑,能收到更好的效果。 下面是一个简单的指令译码电路设计示例。该电路 通过对指令的判断,对输入数据执行相应的操作,包括 加、减、求与、求或、求反,并且无论是指令作用的数 据还是指令本身发生变化,结果都应做出及时的反应。 显然,这是一个较为复杂的组合逻辑电路,如果采用 assign语句描述,表达起来非常复杂。本例中采用电平 敏感的always块,并运用case结构来进行分析判断,使 设计思想得到直观体现,代码整齐有序,便于理解。
芜湖职业技术学院2. initial过程语句initial语句的使用格式如下: Initial语句的使用格式如下:initial begin语句1;语句2; ……endinitial语句不带触发条件,initial过程中的块语句沿时间轴只执行一次。 initial语句通常用于仿真模块中对激励向量的描述,或用于给寄存器变 量赋初值,它是面向模拟仿真的过程语句,通常不能被逻辑综合工具所 支持。 芜湖职业技术学院4.5 块语句块语句是由标志符begin-end或fork-join界定的一组语 句,当块语句只包含一条语句时,块标识符可以缺省。1. 串行块begin-endbegin-end串行块中的语句按串行方式顺序执行。 比如:begin regb= regc= end 仿真时,begin-end块中的每条语句前面的延时都是 相对于前一条语句执行结束的相对时间。 由于begin-end块内的语句顺 序执行,在最后,将regb,regc的 值 都 更 新 为 rega 的 值 , 最 终 regb,regc的值是相同的。 芜湖职业技术学院2. 并行块fork-join并行块fork-join中的所有语句是并发执行的。比如:fork regb= regc= join由于fork-join并行块中的语句 是同时执行的,在上面的块语句执 行完后,regb更新为rega的值,而 regc的值更新为没有改变前的regb 的值,故执行完后,regb与regc的 值是不同的。在进行仿真时,fork-join并行块中的每条语句前面的 延时都是相对于该并行块的起始执行时间的。 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院 芜湖职业技术学院
更多搜索:
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系客服。下面这几类描述中,那一种直接与电路结构有关?A、assign持续赋值语句B、always过程块_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
下面这几类描述中,那一种直接与电路结构有关?A、assign持续赋值语句B、always过程块
C case语句 D 门级原语 nand请指教,谢谢
我有更好的答案
门级原语 nand
就不解释一下??
个人觉得nand是门电路中的与非门,必然直接和电路有关。
采纳率:36%
为您推荐:
其他类似问题
赋值语句的相关知识
换一换
回答问题,赢新手礼包关于Verilog中的几种赋值语句 - nanoty - 博客园
关键字:assign deassign force release
1. 连续赋值语句(Continuous Assignments)
&&& 连续赋值语句是Verilog数据流建模的基本语句,用于对线网进行赋值,等价于门级描述,是从更高的抽象角度来对电路进行描述。连续赋值语句必须以关键词assign开始。
连续复制的主要特点是:
连续赋值语句的左值可以是一下类型之一:
①标量线网
②向量线网
③矩阵中的一个元素(该矩阵可以是标量线网类型的,也可以是向量线网类型的)
④向量线网的某一位
⑤向量线网的部分位
以及上述各种类型的拼接体
但是,不能是向量或向量寄存器。
连续赋值语句总是处于激活状态。只要任意一个操作数发生变化,表达式就会被立即重新计算,并且将结果赋给等号左边的线网。
操作数可以是标量或向量的线网或寄存器,也可以是函数的调用。
赋值延迟用于控制对线网赋予新值的时间,根据仿真时间单位进行说明。赋值延迟类似于门延迟,对于描述实际电路中的时序是非常重要的。
2. 过程赋值语句(Procedural Assignments)
&&& 过程赋值语句的更新对象是寄存器、整数、实数或时间变量等。这些类型的变量在被赋值后,其值将保持不变,直到被其他过程赋值语句赋予新值。过程赋值语句只有在执行到的时候才会起作用。过程赋值语句只能在initial或always语句内进行赋值,只能对变量数据类型赋值,同时initial和always中只能使用过程赋值语句。过程赋值语句的左值可以是以下类型之一:
①reg、整形数、实型数、时间寄存器变量或存储器单元
②上述各种类型的位选(例如:addr[3])
③上述各种类型的域选(例如:addr[31:16])
④上面三种类型的拼接
&&& 过程性赋值语句包括两种类型的赋值语句:阻塞赋值(=)和非阻塞赋值(&=)(其主要区别详见各类Verilog参考书,这里不再详述)。
3. 过程连续赋值语句(Procedural Continuous Assignments)
&&& 过程连续赋值是在过程块内对变量或线网型数据进行连续赋值,是一种过程性赋值,换言之,过程性连续赋值语句是一种能够在always或initial语句块中出现的语句。这种赋值可以改写(Override)所有其他语句对线网或者变量的赋值。这种赋值允许赋值表达式被连续的驱动进入到变量或线网中去。
&&& 过程连续赋值语句有两种类型:
①assign和deassign过程性语句:对变量进行赋值。
②force和release过程性语句:主要用于对线网赋值,也可以用于对变量赋值。
3.1 assign和deassign语句
&&& assign和deassign语句构成了一类过程性连续赋值语句,只能用于对寄存器类型变量的连续赋值操作,不能用来对线网类型数据进行连续赋值操作。
①assign语句
语法:assign &寄存器类型变量& = &赋值表达式&;
&&& assign在执行时,寄存器类型变量将由赋值表达式进行连续驱动,即进入连续赋值状态。如果此时有普通的过程赋值语句对该寄存器变量进行过程赋值操作,由于过程连续赋值语句assign的优先级高于普通过程赋值语句,所以出于连续赋值状态的寄存器变量将忽略普通过程赋值语句对它的过程赋值操作,其逻辑状态仍然由过程连续赋值语句内的赋值表达式所决定。
&&& 如果先后有两条assign语句对同一寄存器变量进行了过程连续赋值操作,那么第二条assign的执行将覆盖第一条assign的执行效果。
②deassign语句
语法:deassign &寄存器类型变量&;
&&& deassign语句是一条撤销连续赋值语句,用来结束对变量的连续赋值操作。当deassign语句执行后,原来由assign语句对该变量进行的连续赋值操作将失效,寄存器变量被连续赋值的状态将得到解除,该变量又可以由普通过程赋值语句进行赋值操作了。这里需要注意一点,当执行该语句撤销对某寄存器变量的连续赋值后,该寄存器变量仍将保持使用该语句之前的原有值。
&&& 上述语句执行过程如下:
s0:在0时刻,out被赋值为0,并且保持这个取值;
s1:在10时刻,s1开始执行,实现了对变量out的连续赋值操作,因此从10时刻开始,out将处于连续赋值状态;
s2:在20时刻,s2开始执行,将覆盖s1产生的作用,所以从20时刻开始,out将由c & d连续驱动;
s3:s3操作覆盖掉s2操作;
s4:当deassign语句得到执行,变量out连续赋值状态被解除,其取值将保持最后一次assign语句赋予的值,即&e & f&;
3.2 force和release语句
&&& force和release语句与assign和deassign语句类似,也是一种过程连续赋值语句。这组赋值语句不仅能对寄存器类型变量产生作用,还能对线网类型数据进行连续赋值操作。
①force语句
语法:force &寄存器变量或者线网数据& = &赋值表达式&&;
force语句应用于寄存器类型变量时,则在force语句执行后,该寄存器变量将强制由&赋值表达式&进行连续驱动,进入被连续赋值的状态,此时将忽略其他较低优先级的赋值语句对该寄存器变量的赋值操作,直到执行一条release语句来释放对该寄存器变量的连续赋值为止。
force语句应用于线网数据时,则force语句执行后,对应的线网数据将得到&赋值表达式&的连续驱动,此时将忽略该线网数据上较低优先级的驱动,直到有一条release语句执行为止。
②release语句
语法:release &&寄存器变量或者线网数据&;
&&& release语句执行后,原先由force语句对变量或者线网施加的过程连续赋值将失效,变量将解除被被连续赋值的状态,较低优先级的赋值语句的赋值操作将有效。
s0:实现对变量var_reg1的过程赋值操作,即var_reg1被赋值为3'b000;
s1:执行assign过程连续赋值语句,用来实现对变量var_reg2的连续赋值,从而var_reg2将被连续赋值为3'b001;
s2:在执行本条语句时,var_reg1未被assign语句进行过连续赋值操作,因此var_reg1被force连续赋值为3'b100;
s3:执行本条语句后,var_reg2被force连续赋值为3'b100;
s4:执行本条语句时,因为变量var_reg1将退出连续赋值的状态,因为var_reg1未曾被assign语句进行过连续赋值操作,故var_reg1取值保持不变,即保持force状态时的值3'b100;
s5:执行本语句时,因为var_reg2在执行s3之前已经由s1实现了连续赋值,所以在本条语句s5执行后,变量var_reg2将恢复到由assign语句s1确定的连续赋值状态,即3'b001;
4. 赋值语句的区别
4.1 连续赋值语句和过程赋值语句之间的区别
连续赋值语句由assign来标示,而过程赋值语句不能包含这个关键词;
连续赋值语句中左侧的数据类型必须是线网数据类型,而过程赋值语句中的被赋值数据类型则必须是寄存器类型的变量;
连续赋值语句不能出现在过程块(initial或always)中,而过程赋值语句可以;
连续赋值语句主要用来对组合逻辑电路进行建模以及对线网数据间的连接进行描述,而过程赋值语句主要用来对时序逻辑电路进行行为描述;
连续赋值语句对被赋值线网型数据的赋值是&连续&的(即赋值表达式的任何变化都会在立刻反应在线网数据的取值上),而过程性赋值语句,只有在过程赋值语句被执行时才执行赋值操作,语句执行完后被赋值变量的取值不再受到赋值表达式的影响(注意这里的一次是指:在initial块中,过程性赋值只顺序执行一次,而在always块中,每一次满足always的条件时,都要顺序执行一次该always块中的语句。)。
连续赋值与过程赋值的区别:
&无assign(过程性连续赋值除外)
& 使用&=&或&《=&&
&&只使用&=&
& 在always语句或initial语句中均可出现
&不可出现于always语句和initial语句
&与周围其他语句有关
&等号右端操作数的值发生变化时
&驱动寄存器
4.2 过程连续赋值语句和连续赋值语句之间的区别
过程连续赋值语句只能用在过程块(initial过程快或always过程块)内,而连续赋值语句不能出现在过程块中。
过程连续赋值语句可以对寄存器类型变量进行连续赋值(其中force-release语句还可以对线网进行连续赋值),但是其赋值目标不能是变量或线网的某一位或某几位,而连续赋值语句只能对线网数据进行赋值,赋值目标可以是线网型数据的某一位或某几位。学习Verilog HDL语言过程中关于三种常用赋值语句的困惑!_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
学习Verilog HDL语言过程中关于三种常用赋值语句的困惑!
正在学习Verilog HDL语言,学习过程中遇到困惑,就是在Verilog 中讲到了有三种常用的赋值语句,一个是连续赋值语句assign,一个是阻塞赋值语句=,一个是非阻塞赋值语句&=,请问这三个到底有什么区别,在实际编程中,各应该怎样使用?
什么情况下,用“as...
我有更好的答案
b=1,则可以这样理解执行顺序和结果 :0] c,d;
assign a=c+d;
则在后面的程序中要用到c+d的值就可以直接用a来表示了
这对模块间的互联非常有用“=”阻塞赋值语句,d=0:
a=b1、=左边是wire类型:先执行a=b,得到a=0,再执行c=d,得到c=0:
a&=c,即所有该类在所在模块内按顺序执行“&=”非阻塞赋值语句,相当于并行语句,当该语句所在模块结束时,所有带“&=”的语句同时执行。例如,相当于串行语句:0]
input[7,c=1,a=0;
end 若执行前,可在定义时用“assign”连续赋值语句;
采纳率:9%
阻塞赋值语句将阻塞进程Verilog HDL 中赋值语句分“assign”连续赋值语句和过程赋值语句(阻塞赋值语句和非阻塞赋值语句在)。这是一种并行机制,能够实现自动跟踪赋值,直到该赋值事件执行完才执行下一条语句;这种语句只能满足数据的一般传送。
非阻塞赋值语句直到整个块的操作完成才一次完成赋值操作,就会进行赋值操作;主要用于端口变量的赋值,也可用在组合逻辑的行为描述中。
连续赋值操作取决于表达式右侧变量是否变化,只要右侧变化
assign 只能给wire类型的变量赋值,而且它只能用来实现组合逻辑,它的赋值必须用=号。assign赋值语句不能放在alway里面。对一个变量赋值,如果在always外面,只能用“assign wire_name = ……”或者parameter的格式。如果在always里面,有两种情况。(1)如果多个变量被赋值的时候,是需要同时的,那么就用&= (2) 如果多个变量被赋值的时候,需要有先后次序,那么就用=通俗来讲,就像是3个人到ATM取钱的时候,(1)是有3台ATM,这三个人同时开始,同时取完;(2)是这3个人排队一个一个取。但是对rtl仿真来讲,可以认为(1)和(2)的执行是“瞬间”完成的,即它们计算的时间为0.
请注意 verilog是硬件语言,你在写代码的时候 要非常知道你写的将会变成什么东西,而不是软件的思维assign 是给组合逻辑赋值= 组合逻辑使用&= 时序逻辑使用 也就是寄存器
多看看书吧,你这个问题回答者很累人,呵呵,这方面的书很多的
其他2条回答
为您推荐:
其他类似问题
赋值语句的相关知识
换一换
回答问题,赢新手礼包}

我要回帖

更多关于 assign 延时赋值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信