Verilog中#能被综合么,综合后有什么含义么?

作者&投稿:勇仪 (若有异议请与网页底部的电邮联系)
verilog中的“综合”究竟是什么含义?~

通俗的来讲,“综合”就是把你用硬件描述语言描述的电路转换成实际能够实现的真实电路的过程。包括门级或者寄存器传输级甚至是开关级。


综合就是把你写的rtl代码转换成对应的实际电路。
比如你写代码assign a=b&c;
EDA综合工具就会去元件库里拿一个二输入与门出来,然后输入端分别接上b和c,输出端接上a

假如你写了很多这样的语句
assign a=b&c;
assign c=e|f;
assign e=x^y;
……
综合工具就会像搭积木一样的把你这些“逻辑”电路用一些“门”电路来搭起来。当然,工具会对必要的地方做一些优化,比如你写一个电路assing a=b&~b,这样工具就吧a恒接为0了,而不会去给你找一个与门来搭这个电路。
所以,“综合”要做的事情有:编译rtl代码,从库里选择用到的门器件,把这些器件按照“逻辑”搭建成“门”电路。

不可综合,是指找不到对应的“门”器件来实现相应的代码。比如#100之类的延时功能,简单的门器件是无法实现延时100个单元的。还有打印语句等,也是门器件无法实现的,这个应该很好理解。

井号就是延迟的意思,无论在哪里,但是不能被综合,只对仿真的时候可以产生延时效果

为求全面完整,叙述比较长,希望你能耐心看完,起码我都耐心打完了,呵呵~
先扼要答题:
(1)#1是延时语句,不能被综合,只能用于仿真。
至于延时多少则取决于你所定义的时钟,例如:
assign #1 A_xor_wire = eq0 ^ eq1; // `timescale 1ns/100ps
就表示该异或门延时为1ns,也就是说从输入端信号变化到输出端体现变化需要1ns的时间。(其中1ns表示延时单位,100ps表示时间精度,即编译器所能接受的最小仿真时间粒度。 )
(2)ud_cnt #(SIZE, ID) cnt (.clk(clk),....) 是带参数值的模块引用,模块实例语句自身包含有新的参数值。你没有贴出完整代码,我还是抄书上例子给你讲,例如:

HA #(5,2) Hal(New, NewB, NewC);
//第1个值5赋给参数AND_DELAY,该参数在模块HA中说明。
//第2个值5赋给参数XOR_DELAY,该参数在模块HA中说明。

module HA(A,B,S,C);
input A,B;
output S,C;
parameter AND_DELAY =1, XOR_DELAY =2;
assign #XOR_DELAY S = A^B;
assign #AND_DELAY C=A&B;
endmodule

//模块实例语句
HA h2 (.A(Cin), .S(Sum), .B(S1), .C(C2)); //通过端口与信号的名字关联

仔细对比看看,想想,我想你应该明白了吧?

再扩展深化:
实际上,电路对不同的信号跳变表现出的延时往往并不一致,这些延时模型包括上升沿延时(输出变为1)、下降沿延时(输出变为0)、关闭延时(输出变成Z,高阻态)和输出变成X的延时。比如:
assign #(1,2) A_xor_wire = eq0 ^ eq1;
assign #(1,2,3) A_xor_wire = eq0 ^ eq1;
第一句表示上升延时为1ns,下降延时为2ns,关闭延时和传递到X的延时取两者中最小的,即1ns。
第二句表示上升延时为1ns,下降延时为2ns,关闭延时为3ns,传递到X的延时取1、2、3中最小的,即1ns。
在一些电路模型中,延时分为最大、典型和最小3种情况。连续赋值语句中的延时也可以采用min:typ:max的格式来表示,如:
assign #(4:5:6, 3:4:5) A_xor_wire = eq0 ^eq1;
表示上升延时的min:typ:max为4:5:6,下降延时的min:typ:max为3:4:5。

你代码中类似“RESETn <= #1 1'b0;”的语句属于“在非阻塞赋值语句的右式(RHS)中增加延时”,可以精确的模拟电路中的传导延时,是一种有意义的、健康的代码风格。以
always (a or b) begin
SUM <= #5 a+b
end
为例,其执行过程是这样的:
首先计算a+b的值,然后将“相加结果赋予sum”的更新事件调度到T+5ns以后执行,此后,a和b上的任何变化都将导致always的再次执行,也就是说a和b上的任何变化都不会被忽略,而总是在5ns以后体现在SUM上。
此外,不推荐在阻塞赋值语句中增加延时(#5 SUM=a+b; 和 SUM = #5 a+b;),也不推荐在非阻塞语句的左式中增加延时(#5 SUM <= a+b;)。详见《设计与验证:Verilog HDL》的8.5.4节。
而在连续赋值语句中,只有一种延时语法是合法的,如下:
assign #5 B=~A;
这种延时精确地模拟了电路中的惯性延时。A信号上任何小于5ns的变化都将被过滤掉,而不会反映到B信号上。

# 是用来模拟电路延迟的。因为在RTL仿真的时候,如果没有#的延迟,信号的变化是瞬间就完成的,没有任何可以测量到的延迟。我们知道,实际电路是会有延迟的。有人会采用#延迟在RTL里模拟这样的电路延迟。这样的延迟是设计人员手工设置的。一旦进行综合,这样的延迟是没有对应的电路单元。也就是说,在综合中没有任何意义。

ud_cnt #(SIZE, ID) cnt (.clk(clk),....) 是实例化一个module。module的名字是ud_cnt。该module定义了两个parameter。在实例化的时候,#(SIZE,ID), 分别用SIZE和ID来从新设定这两个parameter。.clk(clk)等等就是普通的端口映射。

对于第一个问题,是延时语句,verilog语句在综合的时候,综合工具会自动忽略的。
对于第二个语句,是将参数传递的过程,将参数传递给parameter

不能综合,被忽略 了。


verilog中的**是什么意思?
verilog里面的算术:1.加(+):2个操作数相加 2.减(-):2个操作数相减或取1个操作数的负数(二进制补码表示)3.乘(*):2个操作数相乘 4.除(\/):2个操作数相除 5.求幂(**)}}:2个操作数求幂,前一个操作数为底数,后一个操作数为指数 在Verilog中,可以声明两种不同的过程:alwa...

verilog中是什么意思?
verilog是硬件描述语言(HDL)的一种,用于描述数字电路的行为和结构。它是开发数字集成电路(IC)的重要工具,在芯片设计领域被广泛使用。使用verilog可以描述逻辑、时序和结构,包括开关电路、代码组合逻辑、时序电路等等。它是一种高级语言,常用于在芯片设计周期的各个阶段进行设计、仿真、验证、定位错误和...

Verilog中“&&”和“&”的区别是什么?
一、意思不同 1、&&:代表逻辑与。2、&:代表与门运算(按位与)。二、计算方式不同 1、&&:5'b10000 && 5'b10001 结果为1。2、&:5'b10000 & b'b10001 结果为5'b10000。

verilog语言中@(posedgeiclk)和alway@(posedgeiclk)的区别?
总结来说,两者都响应时钟信号的上升沿,但在Verilog编程中的具体应用和上下文环境有所不同。前者通常在特定条件下触发动作或任务,而后者用于描述始终与特定时钟信号相关的持续行为。

verilog语言中assign怎么用
Verilog语言中assign的用法 在Verilog硬件描述语言中,assign语句用于连续赋值。它允许你在模块中对信号进行连续赋值操作,使得信号的值可以根据其他信号或表达式的值动态变化。assign语句通常在模块的描述部分使用,用于描述信号间的连接关系。详细解释:1. assign语句的基本结构:assign 目标信号 = 表达式;其中...

verilog语言中assign怎么用
在Verilog语言中,assign关键字的作用就像一根电线,它将一个变量的值直接且持续地传递给另一个变量,形成一个“连线”效果。简单来说,assign语句用于实现数据的连续赋值,或者将模块的输出连接为其他模块的输入。让我们通过几个例子来直观理解其使用方法。首先,assign语句左边的变量必须是wire类型,例如在...

关于verilog 的assign
Verilog中,assign命令通常被用于数据传输,而非直接赋值。大部分情况下,人们倾向于使用reg型变量进行赋值操作,例如`reg a; a = 1;`,而对于wire型变量,它们主要在模块间的交互中定义,作为输入输出接口。assign命令常用于将一个信号的值持续传递给另一个信号,比如`assign Input = Output;`,这样...

verilog是什么
Verilog是一种硬件描述语言(Hardware Description Language, HDL)。详细解释如下:Verilog,全名为Verification Logic,是一种广泛应用于电子系统设计领域的硬件描述语言。它被用来模拟和验证数字电路和系统,特别是在集成电路(IC)设计和现场可编程门阵列(FPGA)设计的场景中。通过使用Verilog,工程师能够更...

verilog语言中,这句话是什么意思?
其实这是一个判断式,假设a == (nn_mode == 2'b00),所以这个意思就是如果nn_mode == 2'b00说明括号内式子成立,a == 1;否则 a == 0.是1bit的。emif_oen_o 是1 bit的,而nn_mode 2 bit的他俩之间没什么关系。

verilog中,"<="有什么作用?
verilog中,一个语法结构不可能同时允许“表达式”和“语句”,如果某处可以出现表达式,那么就不允许出现语句;如果某处可以出现语句,那么一个单独的表达式就不能出现在那里。如果预期出现的是表达式,那么其中的 <= 就解释成逻辑比较运算符;如果预期出现的是语句,那么其中的 <= 就解释成非阻塞赋值的一...

梁河县13352621594: 新手弱问,Verilog中#可以综合吗 -
兆昆腾消癌: 所有#delay都是不可综合的

梁河县13352621594: 在Verilog语言中怎么像C语言那样延时?例如在程序中用#10不能逻辑综合吧?用#不行的话应该怎么办? -
兆昆腾消癌: 代码程序中的#10是不能被综合的,“#”常被用在Testbench中,代码中可以使用D触发器延时也就是使用“<=”进行赋值,for一般不用在verilog的代码中,因为面积可能很大,有的综合器也可能综合不了它,verilog中可以用计数器代替之.用D触发器延时一次也只能是一个时钟,也就是一个时钟周期的时间,你要长时间的延时那只能用计数器了,可以用时钟上升沿产生计数器,计到想要的时间了给一个高电平就行了

梁河县13352621594: 关于verilog中语句可不可综合 -
兆昆腾消癌: 特别是在testbench中应用非常普遍,也是做初始化用的 测试模块的功能时,给模块提供激励信号.initial语句是不可综合的,只是一种仿真模拟. 测试

梁河县13352621594: Verilog中,#符号是什么意思 -
兆昆腾消癌: #5的概念是延迟的意思.但是是行为级描述 综合时将被过滤. 一般#+数字的组合在仿真器中产生一定的延迟.延迟结构如下~~ 首先`timescale 1ns/100ps 这个是整个延迟的定义.`timescale是关键字,然后后面的两位时间 第一位是用来表示你...

梁河县13352621594: 不能被综合的Verilog语句能烧写到FPGA里面吗? -
兆昆腾消癌: 1、可以在RTL里面查看2、只要正常全局编译通过,就可以配置到FPGA中3、VERILOG中有很多不可综合的语句是用来仿真的,部分可综合语句,由于设计者使用原因,也有可能不被综合.有些语句也有可能被编译器优化了,没被综合.

梁河县13352621594: verilog中的“综合”究竟是什么含义? -
兆昆腾消癌: 通俗的来讲,“综合”就是把你用硬件描述语言描述的电路转换成实际能够实现的真实电路的过程.包括门级或者寄存器传输级甚至是开关级.综合就是把你写的rtl代码转换成对应的实际电路. 比如你写代码assign a=b&c; EDA综合工具就会去...

梁河县13352621594: 在FPGA 中,什么时候可以综合,什么时候不可以综合 -
兆昆腾消癌: 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:(1)不使用initial.(2)不使用#10.(3)不使用循环次数不确定的循环语句,如forever、while等.(4)不使用用户自定义原语(UDP元件).(5)尽量使用同步方式设计电路....

梁河县13352621594: verilog hdl中什么是综合?什么是模拟? -
兆昆腾消癌: 综合(Synthesis),是将RTL电路根据需求转换成门级网表的过程.首先你需要有一段行为级或RTL级HDL代码,然后根据你的需求进行约束(ASIC设计)或根据资源(FPGA)获得相应的门级的网表.模拟/仿真(Simulation),是将当前的代码进行功能验证的过程.通过仿真来确定你的代码在功能上是否正确.对于ASIC设计和高频率的FPGA设计来说,还需要进行PTPX和STA检查,来确定没有时序违例(Timing Violation).

梁河县13352621594: verilog中的函数和任务能综合吗 -
兆昆腾消癌: 简单的函数是可以综合的,任务一般是不可综合的.这个是有标准可以查的.

梁河县13352621594: 在verilog语言中,如果always后面没有跟条件,就这样 always begin ... end 这样的是什么意思??能否 -
兆昆腾消癌: 这样的意思一般用在testbench中 这种意思是永远执行的意思 用来产生仿真激励信号~ 一般这样的语句是不可综合的~

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网