搜档网
当前位置:搜档网 › verilog语句可综合vs不可综合

verilog语句可综合vs不可综合

verilog语句可综合vs不可综合
verilog语句可综合vs不可综合

1)所有综合工具都支持的结构:

always,assign,begin,end,case,wire,tri,supply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。

2)所有综合工具都不支持的结构:

time,defparam,$finish,fork,join,initial,delays,UDP,wait。

3)有些工具支持有些工具不支持的结构:

casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。

建立可综合模型的原则

要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:

1)不使用initial。

2)不使用#10。

3)不使用循环次数不确定的循环语句,如forever、while等。

4)不使用用户自定义原语(UDP元件)。

5)尽量使用同步方式设计电路。

6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。

7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。

9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。

10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对

象不能既使用阻塞式赋值,又使用非阻塞式赋值。

11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。

12)避免混合使用上升沿和下降沿触发的触发器。

13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。

14)避免在case语句的分支项中使用x值或z值。

不可综合verilog语句

1、initial

(我用ISE9.1综合时,有的简单的initial 只能在test bench中使用,不能综合。

也可以综合,不知道为什么)

2、events

event在同步test bench时更有用,不能综合。

3、real

不支持real数据类型的综合。

4、time

不支持time数据类型的综合。

5、force 和release

不支持force和release的综合。

6、assign 和deassign

不支持对reg 数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。

7、fork join

不可综合,可以使用非块语句达到同样的效果。

8、primitives

支持门级原语的综合,不支持非门级原语的综合。

9、table

不支持UDP 和table的综合。

10、敏感列表里同时带有posedge和negedge

如:always @(posedge clk or negedge clk) begin...end

这个always块不可综合。

11、同一个reg变量被多个always块驱动

12、延时

以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。

如:a=#10 b;

这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;

13、与X、Z的比较

可能会有人喜欢在条件表达式中把数据和X(或Z)进行比较,殊不知这是不可综合的,综合工具同样会忽略。所以要确保信号只有两个状态:0或1。

如:

1 module synthesis_compare_xz (a,b);

2 output a;

3 input b;

4 reg a;

5

6 always @ (b)

7 begin

8 if ((b == 1'bz) || (b == 1'bx)) begin

9 a = 1;

10 end else begin

11 a = 0;

12 end

13 end

14

15 endmodule

可综合的Verilog语法子集总汇

常用的RTL语法结构如下: ☆模块声明:module……endmodule ☆端口声明:input,output,inout(inout的用法比较特殊,需要注意) ☆信号类型:wire,reg,tri等,integer常用语for语句中(reg,wire时最常用的,一般tri和integer 不用) ☆参数定义:parameter ☆运算操作符:各种逻辑操作符、移位操作符、算术操作符大多时可综合的(注:===与!==是不可综合的) ☆比较判断:if……else,case(casex,casez)……default endcase ☆连续赋值:assign,问号表达式(?:) ☆always模块:(敏感表可以为电平、沿信号posedge/negedge;通常和@连用) ☆begin……end(通俗的说,它就是C语言里的“{ }”) ☆任务定义:task……endtask ☆循环语句:for(用的也比较少,但是在一些特定的设计中使用它会起到事半功倍的效果) ☆赋值符号:= 和<= (阻塞和非阻塞赋值,在具体设计中时很有讲究的) 可综合的语法时verilog可用语法里很小的一个子集,用最精简的语句描述最复杂的硬件,这也正是硬件描述语言的本质。对于做RTL级设计来说,掌握好上面这些基本语法是很重要。 相信大家在看了这么多了verilog语法书籍以后一定有点烦了,那么现在我告诉大家一个好消息,对于一个RTL级的设计来说,掌握了上面的语法就已经足够了,无论多么牛逼的工程师,在他的代码

里无非也就是上面一些语法而已。当然了,对于一个能够进行很好的仿真验证的代码,一般还需要在RTL级的设计代码中添加一些延时之类的语句,比如大家一定知道#10的作用,就是延时10个单位时间,这个语句虽然在仿真的时候是实实在在的延时,但是这个语句在综合后是会被忽略的,也就是说在我们综合并且布局布线最后烧进FPGA里,这个#10的延时是不会在硬件上实现的。所以说,上面给出的这些语法才是可以最后在硬件上实现的,其它的语法大多会在综合后被忽略。这么一来大家就要问了,为什么语法书里又要给出这么多的语法呢?呵呵,它们大都是为仿真验证是写testbench 准备的,先点到为止,下集继续! 对于模型(module)的建立,要保证可综合性应该注意: (1)不使用initial。(被忽略) (2)不使用#10。(被忽略) (3)不使用循环次数不确定的循环语句,如forever、while等。 (4)不使用用户自定义原语(UDP元件)。 (5)尽量使用同步方式设计电路。 (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。(10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。 (11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。 (12)避免混合使用上升沿和下降沿触发的触发器。

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

VerilogHDL复习题与答案

VerilogHDL硬件描述语言复习 一、 1.VerilogHDL是在哪一年首次被IEEE标准化的? 答:VerilogHDL是在1995年首次被IEEE标准化的。 2.VerilogHDL支持哪三种基本描述方式? 答:VerilogHDL可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程 化结 构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述 建模 3.VerilogHDL是由哪个公司最先开发的? 答:VerilogHDL是由GatewayDesignAutomation公司最先开发的 4.VerilogHDL中的两类主要数据类型什么? 答:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示 抽象的数据存储元件。 5.UDP代表什么? 答:UDP代表用户定义原语 6.写出两个开关级基本门的名称。答: pmosnmos 7.写出两个基本逻辑门的名称。答: andor 8.在数据流描述方式中使用什么语句描述一个设计? 答:设计的数据流行为使用连续赋值语句进行描述 9.采用结构描述方式描述1位全加器。 答: modulefull_add(a,b,cin,s,co); inputa,b,cin; outputs,co; wireS1,T1,T2,T3; xor X1(S1,a,b), X2(s,S1,cin); and A1(T3,a,b), A2(T2,b,cin), A3(T1,a,cin); or O1(co,T1,T2,T3); endmodule 10.initial语句与always语句的关键区别是什么? 答:1)initial语句:此语句只执行一次。 2)always语句:此语句总是循环执行,或者说此语句重复执行。 11.采用数据流方式描述2-4译码器。 答: 'timescale1ns/ns moduleDecoder2×4(A,B,EN,Z); inputA,B,EN; output[0:3]Z; 1

VerilogHDL实例

本文档含有很多Verilog HDL例子://与门 module zxhand2(c,a,b); input a,b; output c; assign c= a & b; endmodule //或门 module zxhor2(c,a,b); input a,b; output c; assign c= a | b; endmodule //非门 module zxhnot2(c,b); input b; output c; assign c=~ b; endmodule ////异或门 module zxhxro2(c,a,b); input b; output c; assign c=a ^ b; endmodule 两选一电路 module data_scan(d0,d1,sel,q); output q; input d0,d1,sel; wire t1,t2,t3; n1 zxhand2(t1,d0,sel); n2 zxhnot2 (t4,sel); n3 zxhand2(t2,d1,t4); n4 zxhor2(t3,t1,t2);

assign q=t1; endmodule verilog HDL实例(一) 练习一.简单的组合逻辑设计 目的: 掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意 equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: //--------------- compare.v ----------------- module compare(equal,a,b); input a,b; output equal; assign equal=(a==b)?1:0; //a等于b时,equal输出为1;a不等于b时, //equal输出为0。 endmodule 测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。 测试模块源代码: `timescale 1ns/1ns //定义时间单位。 module comparetest; reg a,b; wire equal; initial //initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 $stop; //系统任务,暂停仿真以便观察仿真波形。 end compare compare1(.equal(equal),.a(a),.b(b)); //调用模块。 Endmodule

基于VerilogHDL语言的可综合性设计

基于Verilog HDL语言的可综合性设计 1 引言 逻辑综合带来了数字设计行业的革命,有效地提高了生产率,减少了设计周期时间。在手动转换设计的年代,设计过程受到诸多限制,结更容易带来人为的错误。而一个小小的错误就导致整个模块需进行重新设计,设计转换工作占去了整个设计周期的大部分时间,验证工作进行困难,设计技术无法重用等等。而自动逻辑综合工具的出现,突破了上述种种限制,使得设计者从繁琐的转换工作中解脱出来,将更多的时间用于验证和优化,不仅保证了功能的实现,而且有利于提高性能。可见,综合在逻辑设计中具有举足轻重的作用。 2 综合的概念及其过程 2.1 逻辑综合概述 综合就是在给定标准元件库和一定的设计约束条件下,把用语言描述的电路模型转换成门级网表的过程。要完成一次综合过程,必须包含三要素:RTL级描述、约束条件和工艺库。 2.2 RTL级描述 RTL级描述是以规定设计中采用各种寄存器形式为特征,然后在寄存器之间插入组合逻辑,其可以用如图1所示的“寄存器和云图”方式来表示。 图1 RTL级描述 2.3 约束条件 为了控制优化输出和映射工艺要用约束,它为优化和映射试图满足的工艺约束提供了目标,并且它们控制设计的结构实现方式。目前综合工具中可用的约束包括面积、速度、功耗和可测性约束,未来我们或许会看到对封装的约束和对布图的约束等,但是,目前的最普遍的约束是按面积和按时间的约束。 时钟限制条件规定时钟的工作频率,面积限制条件规定该设计将花的最大面积。综合工具将试图用各种可能的规则和算法尽可能地满足这些条件。 2.4 工艺库 按照所希望的逻辑行为功能和有关的约束建立设计的网表时,工艺库持有综合工具必须的全部信息。工艺库含有允许综合进程为建立设计做正确选择的全部信息,工艺库不仅含有ASIC单元的逻辑功能,而且还有该单元的面积、单元输入到输出的定时关系、有关单元扇出的某种限制和对单元所需的定时检查。

用veriloghdl设计计数器

用Verilog HDL设计计数器 一、实验目的 1. 学习使用Verilog HDL语言,并学会使用进行QuartusⅡ软件编 程和仿真; 2. 掌握数字电路的设计方法,熟悉设计过程及其步骤; 3. 培养学生的动手能力,能学以致用,为今后从事电子线路设计 打下良好基础; 4. 巩固加深对数电知识的理解,在仿真调试过程中,能结合原理 来分析实验现象; 二、实验内容 1.设计内容及要求 1)利用Verilog HDL设计一个以自己学号后三位为模的计数器; 2)编写源程序; 3)给出仿真电路图和仿真波形图; 2.需求分析: 由于本人的学号后3位为212,所以应编一个以212为模的加法计数器。若采用同步清零的方法,则计数为0~211,化为二进制数即为0 0000 0000计到0 1101 0011。 3.编写源代码: module count_212(out,data,load,reset,clk);

output [8:0] out; input [8:0] data; input load,reset,clk; reg [8:0] out; always @(posedge clk) + A[8..0] B[8..0] ADDER < CIN A[8..0] B[8..0] LESS_THAN 1 D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR SEL DATAA DATAB OUT0 MUX21 SEL DATAA DATAB OUT0 MUX21 SEL DATAA DATAB OUT0 MUX21 Les s Than0 9' h0D3 -- out[0]~reg0 out[1]~reg0 out[2]~reg0 out[3]~reg0 out[4]~reg0 out[5]~reg0 out[7]~reg0out[8]~reg0 out~[8..0] 9' h000 -- res et clk out[8..0] data[8..0] out~[26..18] 9' h000 -- out~[17..9] load out[6]~reg0A dd0 9' h001 --

Verilog可综合与不可综合语句汇总

1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。 (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:(1)不使用initial。 (2)不使用#10。 (3)不使用循环次数不确定的循环语句,如forever、while等。 (4)不使用用户自定义原语(UDP元件)。 (5)尽量使用同步方式设计电路。 (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。

verilog综合心得

综合:不可综合的运算符:= = = ,!= =,/(除法),%(取余数)。 1、不使用初始化语句。 2、不使用带有延时的描述。 3、不使用循环次数不确定的循环语句,如:forever、while等。 4、尽量采用同步方式设计电路。 5、除非是关键路径的设计,一般不调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 6、用always过程块描述组合逻辑,应在信号敏感列表中列出所有的输入信号。 7、所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 8、在verilog模块中,任务(task)通常被综合成组合逻辑的形式,每个函数(function)在调用时通常也被综合为一个独立的组合电路模块。 9、用户自定义原语(UDP)是不可综合的,它只能用来建立门级元件的仿真模型。 一般综合工具支持的V erilog HDL结构

移位运算符:V erilog HDL提供向右(>>)及向左(<<)两种运算符,运算符高位或地位一旦移出即予丢弃,其空缺的位则予以补零。 连续赋值语句(assign)、case语句、if…else语句都是可以综合的 initial 语句内若包含有多个语句时,必须以begin end 作聚合;单一的初值赋值,因此并不需以begin end做聚合。 循环(Loops)并不能单独地在程序中存在,而必须在initial和always块中才能使用。initial过程块中的语句仅执行一次,而always块中的语句是不断重复执行的。 编写顶层模块的注意事项 每个端口除了要声明是输入、输出还是双向外,还要声明其数据类型,是连线型(wire)还是寄存器型(reg),如果没有声明则综合器默认为wire型。 1、输入和双向端口不能声明为寄存器型。 2、在测试模块中不需要定义端口。 编写testbentch所归纳的心得

常用VerilogHDL 语法总结

常用VerilogHDL 语法总结 1 模块 (1)端口定义:声明模块的输入输出口。引用模块时端口的两种连接方法。 (2)模块内容:I/O说明(输入输出)、内部信号说明(和端口有关的变量说明)、功能定义(定义逻辑功能的三种方式:assign 声明语句;实例元件;always 块)。 (3)理解要点:整体语句并发执行,always块内顺序执行。 2 常量 (1)数字:整数及三种表达方式 x和z值 负数:减号的位置 下划线:位置和作用 (2)参数:parameter符号常量,常用于定义延迟时间(使用#)和变量宽度。 3 变量 (1)wire:表示易assign指定的组合逻辑信号;默认值;任何方程式的输入或assign语句及实例元件的输出;定义格式。(2)reg:表示always块中指定的信号,代表触发器;寄存器数据类型(触发器存储值),默认值为x;定义格式。 (3)memory:reg的数组;描述RAM、ROM、reg文件;单元索引;一个n为寄存器和n个一位数组的区别。 4 运算符与表达式 (1)算术运算符:五种 (2)位运算符:五种 (3)逻辑运算符:三种 (4)关系运算符:四种(3种不同的返回值) (5)等式运算符:四种 (6)移位运算符:两种(移位补零) (7)位拼接运算符:{},常用于某些控制信号位;重复与嵌套使用 (8)缩减运算符:类似于逻辑运算符,结果为一位二进制数(9)运算符优先级 5 语句 (1)赋值语句 阻塞赋值:b<=a;块结束后完成赋值,b的值不是立即改 变的,较为常用; 非阻塞赋值:b=a;赋值语 句执行后块才结束,b的值马上 改变,在沿触发的always块中 使用可能引起错误后果。 (2)块语句 顺序块begin-end:顺序执 行,最后语句执行完流程跳出语 句块; 并行块fork-join:同时执 行,时间最长语句执行完或 disable语句执行时跳出程序 块; 块名的作用; 起始时间和结束时间 (3)条件语句 If-else语句:三种形式; if表达式判断;分号;复合语句; 表达式简写;if语句嵌套;if 与else的配对。 Case语句:三种形式 (casez:不考虑z进行比较, casex:不考虑z和x进行比较); 控制表达式与分支表达式(常量 表达式);default;所有表达式 的位宽必须相等。 条件语句使用不当造成锁 存器:避免错误:case中使用 default,if必须搭配else。 (4)循环语句 Forever:格式;连续执行; Repeat:格式;连续执行n 次;表达式通常为常量表达式; While:格式;执行语句至 条件不满足; For:格式:for(循环变量 初值;循环结束条件;循环变量 增值)。 (5)结构说明语句 Initial:格式;执行一次; 常用来变量初始化和生成激励 波形作为电路的测试仿真信号; Always:格式;执行至仿真 结束;注意时序;常用来描述时 钟信号作为激励信号;时间控制 可以为沿触发(描述时序行为) 也可以是电平触发(描述组合逻 辑行为); Task:定义;任务的调用与 变量的传递;任务调用变量与任 务定义的I/O变量必须一一对 应; Function:定义;函数返回 值(函数定义蕴含定义了同名寄 存器);函数调用通过函数表达 式中的操作数来实现的。 (6)时间控制语句 #、@、wait标识的语句 6 系统函数和任务 (1)$display和$write:输出 信息;格式说明和普通字符; (2)$monitor:监控和输出参 数列表中的表达式和变量值;关 闭与打开控制; (3)$time:返回64位整数表 示当前仿真时刻值;时间尺度; $realtime:返回时间为实 型数; (4)$finish:退出仿真器,返 回主操作系统;参数; (5)$stop:把EDA工具设置为 暂停,给出交互命令提示,把控 制权交给用户; (6)$readmemb 和$readmemh: 从文件读取数据到存储器;格 式;读取内容; (7)$random:返回32位带符 号整型随机数;用于产生随即脉 冲序列和宽度随机的脉冲序列 进行电路测试。 7 编译预处理 (1)`define:宏定义,符号常 量; (2)`include:文件包含;使 用形式; (3)`timescale:时间尺度, 说明跟在该命令后的模块的时 间单位和时间精度; (4)`ifdef、`else、`endif: 满足条件的语句进行编译;不编 译的部分也应符VerilongHDL语 言规范。

verilog语句可综合vs不可综合

1)所有综合工具都支持的结构: always,assign,begin,end,case,wire,tri,supply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 2)所有综合工具都不支持的结构: time,defparam,$finish,fork,join,initial,delays,UDP,wait。 3)有些工具支持有些工具不支持的结构: casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点: 1)不使用initial。 2)不使用#10。 3)不使用循环次数不确定的循环语句,如forever、while等。 4)不使用用户自定义原语(UDP元件)。 5)尽量使用同步方式设计电路。 6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对

verilog语言的综合与不可综合

Verilog的综合与不可综合 综合说明编的代码可以对应出具体的电路,不可综合说明没有对应的电路结构。不可综合的代码编译通过,只能看到输出,不能实现电路,就是不能用来制作具体的芯片。 一、基本 Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器。 二:verilog语句结构到门级的映射 1、连续性赋值:assign 连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因些连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。 2、过程性赋值: 过程性赋值只出现在always语句中。 阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。 建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。 过程性赋值的赋值对象有可能综合成wire,latch,和flip-flop,取决于具体状况。如,时钟控制下的非阻塞赋值综合成flip-flop。 过程性赋值语句中的任何延时在综合时都将忽略。 建议同一个变量单一地使用阻塞或者非阻塞赋值。 3、逻辑操作符: 逻辑操作符对应于硬件中已有的逻辑门 4、算术操作符: Verilog中将reg视为无符号数,而integer视为有符号数。因此,进行有符号操作时使用integer,使用无符号操作时使用reg。 5、进位: 通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。如: Wire [3:0] A,B; Wire [4:0] C; Assign C=A+B; C的最高位用来存放进位。 6、关系运算符: 关系运算符:<,>,<=,>= 和算术操作符一样,可以进行有符号和无符号运算,取决于数据类型是reg,net还是integer。

verilog不可被综合的语句

verilog 不可综合语句总结汇总 2009-04-20 18:37 (1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。 (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点: (1)不使用initial。 (2)不使用#10。 (3)不使用循环次数不确定的循环语句,如forever、while等。 (4)不使用用户自定义原语(UDP元件)。 (5)尽量使用同步方式设计电路。 (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。 (11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。 (12)避免混合使用上升沿和下降沿触发的触发器。 (13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。 (14)避免在case语句的分支项中使用x值或z值。 不可综合verilog语句2009-04-14 19:33

VerilogHDL试卷及答案

一、选择题: 1、下列标示符哪些是合法的(B ) A、$time B、_date C、8sum D、mux# 2、如果线网类型变量说明后未赋值,起缺省值是(D ) A、x B、1 C、0 D、z 3、现网中的值被解释为无符号数。在连续赋值语句中,assign addr[3:0]=-3;addr被赋予的值是(A )//补 码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! A、4’b1101 B、4’b0011 C、4’bxx11 D、4’bzz11 4、reg[7:0] mema[255:0]正确的赋值是(A ) A、mema[5]=3’ d0, B、8’ d0; C、1’ b1; D、mema[5][3:0]=4’ d1 5、在code模块中参数定义如下,请问top模块中d1模块delay1、delay2的值是( D ) module code(x,y); module top; paramee delay1=1,delay2=1; ……………. ………………………………code #(1,5) d1(x1,y1); endmodule endmodule A、(1,1) B、(5,5) C、(5,1) D、(1,5) 6、“a=4’ b11001,b=4’ bx110”选出正确的运算结果(B ) A、a&b=0 B、a&&b=1 C、b&a=x D、b&&a=x 7、时间尺度定义为timescale 10ns/100ps,选择正确答案(C ) A、时间精度10ns B、时间单位100ps C、时间精度100ps D、时间精度不确定 8、若a=9,执行$display(“current value=%0b,a=%0d”,a,a)正确显示为(B )//去除无效0 A、current value=1001,a=09 B、current vale=1001,a=9 C、1001,9 D、current vale=00…001001,a=9 9、always begin #5 clk=0;#10 clk=~clk;end产生的波形(A )//5占15的1/3 A、占空比1/3 B、clk=1 C、clk=0 D、周期为10 10、在Verilog中定义了宏名`define sum a+b+c 下面宏名引用正确的是(C ) //注意引用 A、out=’sum+d; B、out=sum+d; C、out=`sum+d; D、都正确 二、填空题:(共15分,每小题3分) 1、某一纯组合电路输入为in1,in2和in3,输入出为out,则该电路描述中always的事件表达式应写为 always@(in1,in2,in3 );若某一时序电路由时钟clk信号上升沿触发,同步高电平复位信号rst清零,该电路描述中always的事件表达是应该写为always @( posedge clk )。 //@(条件表达式) do_something; 表示等待条件表达式满足,然后do_something,然后就往下走了。通常用在testbench中,不可综合。 ------------------------------------ always @(a or b or c) begin do_something; end 表示不停地监测a、b、c,一旦它们任何一个发生变化,就立刻do_something,并且这个“监测”是始终存在的。这种电路综合出来时组合逻辑电路。

数字系统设计与verilogHDL课程设计

数字系统设计与v e r i l o g H D L课程设计设计题目:实用多功能数字钟 专业:电子信息科学与技术 班级:0313410 学号: 姓名:杨存智 指导老师:黄双林 摘要 本课程设计利用QuartusII软件VerilogVHDL语言的基本运用设计一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能。 单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿真调试,已完全达到分块模式设计功能,并达到设计目标要求。 关键字:多功能数字钟、Verilog、模块、调试、仿真、功能 目录

课程设计的目的 通过课程设计的锻炼,要求学生掌握Verilog HDL语言的一般设计方法,掌握Verilog HDL语言的基本运用,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的创新精神。 掌握现代数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。 课程设计的任务与要求 用Verilog HDL语言设计一个多功能的数字钟,具有下述功能: (1)计时功能。包括时、分、秒的计时; (2)定时与闹钟功能:能在设定的时间发出闹铃音; (3)校时功能。对时、分和秒能手动调整以校准时间; (4)整点报时功能;每逢整点,产生“嘀嘀嘀嘀一嘟”四短一长的报时音。 2.课程设计思路及其原理 数字计时器要实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能,所有功能都基于计时功能。因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为50MHZ,通过分频获得所需脉冲频率1Hz。得到1hz脉冲后,要产生计时模块,必须需要加法器来进行加法,因此需要一个全加器,此实验中设计一个八位全加器来满足要求。 数字电路设计中,皆采用二进制加法,为实现实验中时分秒的最大功能,本实验中采用十六进制加法器,再进行BCD码进行转换来实现正常时钟显示。为产生秒位,设计一个模60计数器,利用加法器对1HZ 的脉冲进行秒计数,产生秒位;为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成;为产生时位,用一个模24计数器对分位的进位脉冲进行计数。整个数字计时器的计数部分共包括六位:时十位、时个位、分十位、分个位、秒十位和秒个位。基本的计时模块完成之后,整点报时、清零、校时、LED显示、闹铃模块可以相互实现,其中,闹铃模块与计时模块的显示相互并行。 清零功能是通过控制计数器清零端的电平高低来实现的。只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。 保持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。

基于VerilogHDL的表决器的设计

基于V e r i l o g H D L的表 决器的设计 This model paper was revised by LINDA on December 15, 2012.

学生课程实验报告书 12 级电通系 通信工程专业 03 班 学号 312890 姓名 2014--2015学年第 2 学期 实验项目:基于Verilog HDL的表决器的设计 实验时间: 实验目的: 1、熟悉Verilog HDL的编程。 2、熟悉七人表决器的工作原理。 3、进一步了解实验系统的硬件结构。 实验原理: 所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为此行为可行;否则如果否决的票数过半,则认为此行为无效。 七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于4时,则认为同意;反之,当否决的票数大于或者等于4时,则认为不同意。实验中用7个按键开关来表示七个人,当对应的按键开关输入为‘1’时,表示此人同意;否则若按键开关输入为‘0’,则表示此人反对。表决的结果用一个LED表示,若表决的结果为同意,则LED被点亮;否则,如果表决的结果为反对,则LED不会被点亮。同时,数码管上显示通过的票数。 实验内容: 本实验就是利用实验系统中的按键开关模块和LED模块以及数码管模块来实现一个简单的七人表决器的功能。按键开关模块中的键1~键7表示七个人,当按键开关输入为‘1’时,表示对应的人投同意票,否则当按键开关输入为‘0’时,表示对应的人投反对票;LED模块中D1表示七人表决的结果,当LED1点亮时,表示此行为通过表决;否则当LED1熄灭时,表示此行为未通过表决。同时通过的票数在数码管上显示出来。 实验步骤:原理图步骤与实验一相同 模式选择键”:按动该键能使实验板产生12种不同的实验电路结构。本次实验的模式选择到“5”(红色数码管上显示)。 用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致

VerilogHDL语法基础

Verilog HDL语法基础(1) Verilog的词法约定 1Verilog是大小写相关的,其中的关键字全部为小写。 2空白符由空格、制表符、和换行符组成。 3单行注释以“//”开始,verilog将忽略此处到行尾的内容。多行注释以“/ *”开始,以“*/”结束。多行注释不允许嵌套 4操作符有三种:单目操作符、双目操作符和三目操作符。 5数字声明 Verilog中有两种数字生命:指明位数的数字和不指明位数的数字 指明位数的数字表示形式: Size用来指明数字位宽度,只能用十进制整数表示 Base format包括十进制(’d或’D),二进制(’b或’B),八进制(‘o或’O),十六进制(‘h或’H) 例如 4’b1111 //4位2进制数 12’h3ac //12位16进制数 不指明位数的数字:如果数字说明中没有指定基数,那么默认表示为十进制数。如果没有指定位宽,则默认的位宽度与仿真器和使用的计算机有关(最小为32位)。 ‘o21//32位八进制数 X值和Z值:不确定值用X表示,高阻用Z值表示。在八进制数中代表3位,十六进制中代表4位。 12’h12X //这是一个12位16进制数,其中低四位不确定 负数:在表示位宽的数字前面增加一个减号来表示它是一个负数。 -6’d3//一个6位的用二进制补码形式存储的十进制数3,表示负数 -6’sd3//一个6位的带符号算数运算的负数 下划线符号和问号: 除了第一个字符,下划线“_”可以出现在数字中的任何位置,它的作用只是提高可读性,在编译阶段会被忽略掉 问号“?”是z的另一种表示,使用问号的目的在于增强casex和casez语句的可读性。在这两条语句中,“?”表示不必关心的情况。 12’B1111_0011_1110// 增强可读性 4’b10??//相当于4’b10zz 6字符串是双引号括起来的一个字符队列。对于字符串的限制是,它必须在一行中书写完,不可书写在多行中,也不能包含回车符。Verilog将字符串当作一个单字节的ASCII字符队列。 “Hello Verilog world”//是一个字符串 7标识符和关键字 关键字是语言中预留的用于定义语言结构的特殊标识符。Verilog中关键字全部小写。 标识符是程序代码中对象的名字,程序员使用标识符来访问对象。Verilog中标识符由字母数字字符、下划线和美元符号组成,区分大小写。其第一个字符必须是数字字符或下划线。

FPGA中不可综合语句汇总

(1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。 (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点: (1)不使用initial。 (2)不使用#10。 (3)不使用循环次数不确定的循环语句,如forever、while等。 (4)不使用用户自定义原语(UDP元件)。 (5)尽量使用同步方式设计电路。 (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。 (11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。 (12)避免混合使用上升沿和下降沿触发的触发器。 (13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。 (14)避免在case语句的分支项中使用x值或z值。 不可综合verilog语句2009-04-1419:33 1、initial 只能在test bench中使用,不能综合。(我用ISE9.1综合时,有的简单的initial也可以综合,不知道为什么) 2、events event在同步test bench时更有用,不能综合。 3、real 不支持real数据类型的综合。 4、time 不支持time数据类型的综合。

相关主题