verilog语法版本|system verilog和verilog区别

|

① 现在支持systemverilog语法的modelsim是什么版本

现在支持systemverilog语法的modelsim是什么版本目前ISE11自带的仿真器不支持SystemVerilog语言,您可以使用Xilinx支持的第三方仿真软件,modelsim.

② system verilog和verilog区别

system verilog可以看做是verilog一个升级版本,但是主要是验证相关的升级。具体来说只要是下面几点:1. 过程语句相比于Verilog,SV从C中继承了一些方便的语法。2.任务和函数,在SV中的fork—join_none线程中,函数可以调用任务,只有这时可以。3. 局部数据存储 automatic动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式,包括堆区、栈区。静态存储方式是指在程序编译期间分配固定的存储空间的方式。4. 时间、精度可以在每个模块中指明时间参数。

③ Verilog-1995和verilog-2001的区别和改进

1、模块声明的扩展(1) Verilog‐2001允许将端口声明和数据类型声明放在同一条语句中,例子如下:向左转|向右转(2)Verilog‐2001中增加了ANSIC风格的输入输出端口声明,可以用于mole,task和function。例子如下:向左转|向右转(3)对于含有parameter的mole,例子如下:向左转|向右转2、带有初始化的寄存器类型变量声明Verilog‐2001中允许在声明变量的同时对其进行初始化赋值,他是在initial语句中的0时刻开始执行。例子如下:3、敏感表的改进(1)逗号分开敏感列表在敏感表中的变量可以用逗号“,”分开,当然,当然or也是可以的。例子如下:[email protected](posedge clk,negedge rst)也是可以的。(2)组合逻辑的电平敏感@* //@(*) is also ok“*”代表了逻辑块中每个被赋值的变量,例子如下:4、有符号算数运算的扩展(1)net型和reg型可以声明为带符号的变量(2)函数的返回值可以是有符号数(3)Literal integer numbers可以定义为有符号的(4)增加算数右移左移(>>>,<<<)操作符“>>>”和“<<<”。对于有符号数,执行算术移位操作时,将符号位填补移出的位。例子如下:(5)增加系统函数$signed,$unsigned用于在无符号和有符号数之间的转换5、可变向量域的选择[<starting_bit>+”:width]从起始位开始递增,位宽为width[<starting_bit>‐”:width]从起始位开始递减,位宽为width其中,起始位可以是变量,但位宽必须是整数。因此可以用可变域选择,用循环语句选取一个很长的向量所有位。6、多维数组的建立Verilog‐1995中只允许对reg,integer和time建立一维的数组,常用于RAM,ROM的建模。Verilog‐2001中可以对net和variable建立多维数组。7、多维数组的赋值Verilog‐1995不允许直接访问矩阵字的某一位或某几位,必须将整个矩阵字复制到另一个暂存变量中,从暂存中访问。Verilog‐2001可以直接访问矩阵的某一维或某几位。8、乘方运算符增加乘方运算(power operate),运算符是**,如果其中有一个操作数是real类型的,返回值将是real类型。两个操作数都是integer类型,返回才是integer类型。9、自动(可重入)任务和自动(递归)函数(1)可重入任务任务本质上是静态的,同时并发执行的多个任务共享存储区。当某个任务在模块中的多个地方被同时调用,则这两个任务对同一块地址空间进行操作,结果可能是错误的。Verilog‐2001中增加了关键字automatic,内存空间是动态分配的,使任务成为可重入的。(2)递归函数10、自动宽度扩展Verilog‐1995中对于不指定位数的位宽超过32为的总线赋高阻时,只会对低32位赋值为高阻,高位将为0。Verilog‐2001将高阻或不定态赋值给未指定位宽的信号时,可以自动扩展到整个位宽范围。11、常数函数Verilog语法规定必须使用数值或常数表达式来定义向量的位宽和阵列的规模。Verilog‐1995中要求上述表达式必须为算数操作。Verilog‐2001中可以使用函数,成为常数函数。他的数值在编译或详细描述中被确定。12、增加了文件输入输出操作Verilog‐1995中在文件的输入/输出操作方面功能非常有限,文件操作经常借助于Verilog PLI(编程语言接口),通过与C语言的文件输入/输出库的访问来处理。并且规定同时打开的I/O文件数不能多于31个。Verilog‐2001增加了新的系统任务和函数,并且规定同时打开的文件数目为230个

④ 关于verilog语法

always中 不能再用always他不能嵌套 funcation 也不可以

⑤ 关于verilog的基本语法问题~~

if( adj == 1 )……else……这样不行吗

⑥ verilog语法问题

你是不是错误提示:Error (10200): Verilog HDL Conditional Statement error at ……: cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct这是因为,你的“[email protected](posedge clk or negedge r_est)”表明在clk上升沿或r_est下降沿这两个敏感事件发生时always语句块得以触发;而always中的if条件语句必须至少有一个条件指向其中一个敏感事件(边界标识符);所以写成“if(r_est)…else…”就会出错。你可以把“[email protected](posedge clk or negedge r_est)”改为“[email protected](posedge clk or posedge r_est)”再编译试试,应该就没问题了。你右键该错误点击“Help”里是这么说的:CAUSE: In a conditional statement at the specified location in a Verilog Design File (.v), you specified a condition that Quartus II Integrated Synthesis cannot use to classify the edges in the enclosing always construct's event control. When an event control contains multiple edges, Quartus II Integrated Synthesis distinguishes the asynchronous control signals from the clock by analyzing the conditional statements in the always construct. For example, the following code fragment contains an always construct whose event control contains three edges—two asynchronous resets and a clock.always @ (posedge clk or posedge rst1 or posedge rst2) begin if ( rst1 || rst2 ) q <= 1'b0; else q <= d;endQuartus II Integrated Synthesis uses the if condition to identify the two asynchronous resets and, by implication, the clock. For edge classification, Quartus II Integrated Synthesis requires that a condition fall into one of two categories. It can refer to a single edge identifier (to match posedge events) or its complement (to match negedge events), for example, rst1, !rst1, rst1 == 1'b1, rst1 == 1'b0. It can also OR two or more expressions that each refer to a single edge identifier or its complement, for example, (rst1 || rst2), (!rst1 || !rst2). You can receive this error if your condition tests for the wrong polarity, or if it tests for the value of a variable that is not an edge in the event control. For example, to match a posedge rst event, the condition must be rst or rst = 1'b1.Finally, you can receive this error if you are attempting to use a single condition expression to test for both an asynchronous reset/set and a synchronous reset/set condition. The following code fragment contains an example of an illegal condition expression: always @ (posedge clk or posedge rst) begin if ( rst || sync_rst ) q <= 1'b0; else q <= d;endQuartus II Integrated Synthesis generates this error message when compiling this design because it cannot match sync_rst to an edge on the sensitivity list. 其中关键的语句我摘译一下,不一定译得准确,不过大体意思我想你应该可以了解了:原因:……指定了一个条件,Quartus II 综合器不能够将该条件用于在封闭的always结构的事件控制中对边界进行区分。当一个事件控制中包含多重边界,Quartus II 综合器通过分析always结构中的条件语句来对时钟和异步控制信号加以区分。……Quartus II 综合器采用if条件来鉴别两个异步reset信号,并隐含地鉴别了clock信号。为了分类的需要,Quartus II 综合器需要有一个条件落入两个类别之一。它可以指向一个单独的边界标识符(以匹配posedge事件)或它的补语(以匹配negedge事件),例如, rst1, !rst1, rst1 == 1'b1, rst1 == 1'b0。它也可以是OR两个或更多的表达式,其中每一个指向一个单独的边界标识符或它的补语……当你的条件测试发现错误极性,或者它测试变量的值,但该值在事件控制中并不是一个边界时,你会接到这个错误。例如,为了匹配一个posedge rst事件,条件必须是rst或rst = 1'b1。编译错误时多看看Help,讲得很详细~

⑦ verilog语法求助

你是不是错误提示:Error(10200):……:cannotmatchoperand(s)waysconstruct这是因为,你的“[email protected](posedgeclkornegedger_est)”表明在clk上升沿或r_est下降沿这两个敏感事件发生时always语句块得以触发;而always中的if条件语句必须至少有一个条件指向其中一个敏感事件(边界标识符);所以写成“if(r_est)else”就会出错。你可以把“[email protected](posedgeclkornegedger_est)”改为“[email protected](posedgeclkorposedger_est)”再编译试试,应该就没问题了。你右键该错误点击“Help”里是这么说的:CAUSE:(.v),'seventcontrol.,.Forexample,[email protected]()beginif(rst1||rst2)q<=1'b0;elseq<=d;hronousresetsand,byimplication,theclock.Foredgeclassification,gories.(tomatchposedgeevents)oritscomplement(tomatchnegedgeevents),forexample,rst1,!rst1,rst1==1'b1,rst1==1'b0.tscomplement,forexample,(rst1||rst2),(!rst1||!rst2).,.Forexample,tomatchaposedgerstevent,theconditionmustberstorrst=1'b1.Finally,/setandasynchronousreset/setcondition.n:[email protected](posedgeclkorposedgerst)beginif(rst||sync_rst)q<=1'b0;elseq<=d;_.其中关键的语句我摘译一下,不一定译得准确,不过大体意思我想你应该可以了解了:原因:……指定了一个条件,QuartusII综合器不能够将该条件用于在封闭的always结构的事件控制中对边界进行区分。当一个事件控制中包含多重边界,QuartusII综合器通过分析always结构中的条件语句来对时钟和异步控制信号加以区分。……QuartusII综合器采用if条件来鉴别两个异步reset信号,并隐含地鉴别了clock信号。为了分类的需要,QuartusII综合器需要有一个条件落入两个类别之一。它可以指向一个单独的边界标识符(以匹配posedge事件)或它的补语(以匹配negedge事件),例如,rst1,!rst1,rst1==1'b1,rst1==1'b0。它也可以是OR两个或的表达式,其中每一个指向一个单独的边界标识符或它的补语……当你的条件测试发现错误极性,或者它测试变量的值,但该值在事件控制中并不是一个边界时,你会接到这个错误。例如,为了匹配一个posedgerst事件,条件必须是rst或rst=1'b1。编译错误时多看看Help,讲得很详细~

⑧ Verilog语法问题!

begin–end 组合就相当于一个括号,分号表示语句执行结束,begin–end是用来把多条语句放在一起的执行的,也就是说分号前后都不能再出现其他语句,否则报错,括号内的语句表示都是在前面条件下执行的。希望我的回答能对你有帮助。

⑨ Verilog语法请教

首先,最外面的一层就是verilog中的唯一的三目运算各个符,即? :这句的意思是:如果qout=59,并且cin=1的话,cout=1,否则cout=0&在这里是逻辑与运算,必须前后都为1时结果才会视为1,而? :的意思就是如果问号前的逻辑值为1,则取问号与冒号之间的数,否则就取冒号后的数

⑩ verilog语法

1、经测试可以综合,你在哪看到说不可以的?2、这里not and or都是verilog保留的原语,系统中将其定义为门电路,sela什么的都算作子模块之间内部的连接线,这样用时在顶层文件中不需要定义


赞 (0)