Verilog基础的基础知识
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
原则四:在同一个always块中同时建立时序 和组合逻辑电路时,用非阻塞赋值; 原则五:在同一个always块,不要同时使用 非阻塞赋值和阻塞赋值; 原则六:不要在多个always块中为同一个变 量赋值; 原则七:用$strobe系统任务来显示用非阻 塞赋值的变量值; 原则八:在赋值是不要用#0延迟;
常用Verilog语法之二
逻辑;关系;等式;移位;位拼接;缩减 运算符 优先级别 关键词 赋值语句和块语句(顺序块、并行块、块 名、起始时间和结束时间)
MEITEC ChengDu Techno Center Co.,Ltd
常用语法之二
位拼接运算符{ },在C语言没有定义,但 在verilog 中确是一种十分有用的语法; 缩减运算符也是C语言所没有的,合理的使 用缩减运算符可以使程序简洁、明了; 阻塞和非阻塞赋值也是C语言没有的。我们 应当理解这是十分重要的概念,特别在编 程写综合风格的模块中要加以注意;
MEITEC ChengDu Techno Center Co.,Ltd
思考题
是否任意抽象的符合语法的Verilog模块都 可以通过综合工具转变为电路结构? 什么叫综合? 仿真是什么?为什么要进行仿真? 仿真可以在几个层面上进行?每个层面的 仿真有什么意义? 如何产生连续的周期测试时钟?
MEITEC ChengDu Techno Center Co.,Ltd
Verilog语法的基本概念
每个模块要进行端口定义,并说明输入输出 口,然后对模块的功能进行 描述。 Verilog HDL程序的书写格式自由,一行可 以写几个语句,一个语句也可以分写多行。 除了endmodule语句外,每个语句和数据定 义的最后必须有分号。 可以用/*.....*/和//.......对Verilog HDL程序的任何部分作注释。一个好的,有 使用价值的源程序都应当加上必要的注释, 以增强程序的可读性和可维护性。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
initial begin areg=0; //初始化寄存器areg for(index=0;index memory[index] =0; //初始化一个memory end 在这个例子中用initial语句在仿真开 始时对各变量进行初始化,注意这个初始 化过程不需要任何时间。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
宏定义字符串引用时,不要忘记,要用` 引 号 Include等编译预处理也必须用`引导,而不 是与C语言一样用#引导或不需要引导符; 关于阻塞和非阻塞的原则归纳总结:原则一 :时序电路建模时,用非阻塞赋值; 原则二:锁存器电路建模时,用非阻塞赋值; 原则三:用always块写组合逻辑时,采用阻 塞赋值;
MEITEC ChengDu Techno Center Co.,Ltd
例子三
module adder ( count,sum,a,b,cin ); input [2:0] a,b; input cin; output count; output [2:0] sum; assign {count,sum} = a + b + cin; endmodule
Verilog HDL 基础总结
明达科(成都)科技培训有限公司
MEITEC ChengDu Techno Center Co.,Ltd
Verilog语法的基本概念
Verilog程序是由模块构成的。每个模块的内 容都是位于module 和endmodule两个语句之 间。每个模块实现特定的功能。 模块是可以进行层次嵌套的。正因为如此才 可以将大型的的数字电路设计分割成不同的 小模块来实现特定功能。
always @(posedge CK or posedge RES ) begin if ( RES == 1’b1 ) Q <= 1’b0 ; else if ( EN == 1’b1 ) Q <= ~Q ; end assign CA = EN & Q ; endmodule
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
结构说明语句(initial,always语句) Task 和 function 说明语句 系统函数和任务
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
一个程序模块可以有多个initial和always 过程块; 每个initial和always说明语句在仿真的一 开始同时立即开始执行; initial语句只执行一次; always语句则是不断地重复活动着,直到仿 真过程结束;
MEITEC ChengDu Techno Center Co.,Ltd
例子一
module muxtwo (out, a, b, sl); input a,b,sl; output out; reg out; always @ (sl or a or b) if (!sl) out = a; else out = b; endmodule
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
$stop 和$finish常用在测试模块的 initial模块中,配合时间延迟用来控制仿 真的持续时间; $random在编写测试程序是十分有用的,可 以用来产生边沿不稳定的波形,和随机出现 的脉冲; $readmem在编写测试程序是也十分有用,可 以用来生成给定的复杂数据流.
MEITEC ChengDu Techno Center Co.,Ltd
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
always语句后跟着的过程块是否运行,则 要看它的触发条件是否满足,如满足则运 行过程块一次,再次满足则再运行一次, 直至仿真过程结束; 在一个模块中,使用initial和always语句 的次数是不受限制的,它们都是同时开始 运行的; task和function语句可以在程序模块中的 一处或多处调用;
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
系统任务$monitor 时间度量系统函数$time 系统任务$finish $stop $readmemb $readmemh $random 编译预处理(宏定义;文件包含处理;时间尺 度;条件编译命令)
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
Always的时间控制可以是沿触发也可以是 电平触发,可以是单个信号也可以是多个信 号,中间需要用关键字OR 连接; 沿触发的always块常常描述时序行为,如有 限状态机; 电平触发的always块常常用来描述组合逻 辑电路; $display 和$write的格式需要注意;
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之一
模块的结构(模块端口定义;模块内容) 数据类型及其常量和变量 运算符及表达式
MEITEC ChengDu Techno Center Co.,Ltd
ቤተ መጻሕፍቲ ባይዱ
常用Verilog语法之一
在Verilog模块中所有过程块(initial, always)、连续赋值语句、实例引用都是 并行的; 他们表示的是一种通过变量名互相连接的 关系 在同一模块中这三者出现的先后顺序没有 关系。 只有连续赋值的语句assign和实例引用语 句可以独立与过程块而存在于模块功能定 义部分。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
在多模块调试的情况下,$monitor需配合 $monitoron 与$monitoroff使用 $monito与$display的不同之处在于 $monitor是连续监视数据的变化, 因而往 往只要在测试模块的initial块中调用一次 就可以监视被测试的所以感兴趣的信号,不 需要也不能在always过程中调用$monitor $time常用在$monitor中,用来做时间标记
MEITEC ChengDu Techno Center Co.,Ltd
Verilog语法的基本概念
如果每个模块都是可以综合的,通过综合 工具可以把它们的功能描述全都转换为最 基本的逻辑单元描述,最后可以用一个上 层模块通过实例引用把这些模块连接起来 ,把它们整合成一个很大的逻辑系统。 Verilog 模块可以分为两种类型:一种是 为了让模块最终能生成电路结构,另一种 只是为了测试所设计的电路其逻辑功能是 否正确。
module EN, Q, CA ) ; input output reg test ( CK, RES, ; CK , RES, EN Q, CA ; Q ;
4 选一
4 to 1 seleclter (use function case) module test(din, sel, dout ) ; input [3:0] din ; input [1:0] sel ; output dout ; function select ; input [3:0] din ; input [1:0] sel ; case (sel) 2'h0: select = din[0] ; 2'h1: select = din[1] ; 2'h2: select = din[2] ; 2'h3: select = din[3] ; default select = 1'bx ; endcase endfunction assign dout = select ( din, sel ) ; endmodule
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之一
被实例引用的模块,其端口可以通过不同 名的连线或寄存器类型变量连接到别的模 块相应的输出输入信号端。 在always块内被赋值的每一个信号都必须 定义成reg型。
MEITEC ChengDu Techno Center Co.,Ltd
MEITEC ChengDu Techno Center Co.,Ltd
练习
分别使用如下方式设计一个3输入或门 or3: 连续赋值 原语调用 UDP 过程赋值
MEITEC ChengDu Techno Center Co.,Ltd
练习
设计一个对同步输入码流中“10110”序列 的检测电路 完成一个8位的双向移位寄存器的设计。要 求能够在控制信号和时钟的共同作用下进 行并行输入、左移和右移操作。其中的左 移与右移操作都是用外来数据位填充移空 位的。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之三
条件语句(if_else ,case) 循环语句(forever,repeat,while,for)
MEITEC ChengDu Techno Center Co.,Ltd
例子程序
If else 语句
MEITEC ChengDu Techno Center Co.,Ltd
例子二
module muxtwo (out, a, b, sl); input a,b,sl; output out; not u1(ns1,sl); and #1 u2(sela,a,nsl); and #1 u3(selb,b,sl); or #2 u4(out ,sela,selb); endmodule
常用Verilog语法之五
原则四:在同一个always块中同时建立时序 和组合逻辑电路时,用非阻塞赋值; 原则五:在同一个always块,不要同时使用 非阻塞赋值和阻塞赋值; 原则六:不要在多个always块中为同一个变 量赋值; 原则七:用$strobe系统任务来显示用非阻 塞赋值的变量值; 原则八:在赋值是不要用#0延迟;
常用Verilog语法之二
逻辑;关系;等式;移位;位拼接;缩减 运算符 优先级别 关键词 赋值语句和块语句(顺序块、并行块、块 名、起始时间和结束时间)
MEITEC ChengDu Techno Center Co.,Ltd
常用语法之二
位拼接运算符{ },在C语言没有定义,但 在verilog 中确是一种十分有用的语法; 缩减运算符也是C语言所没有的,合理的使 用缩减运算符可以使程序简洁、明了; 阻塞和非阻塞赋值也是C语言没有的。我们 应当理解这是十分重要的概念,特别在编 程写综合风格的模块中要加以注意;
MEITEC ChengDu Techno Center Co.,Ltd
思考题
是否任意抽象的符合语法的Verilog模块都 可以通过综合工具转变为电路结构? 什么叫综合? 仿真是什么?为什么要进行仿真? 仿真可以在几个层面上进行?每个层面的 仿真有什么意义? 如何产生连续的周期测试时钟?
MEITEC ChengDu Techno Center Co.,Ltd
Verilog语法的基本概念
每个模块要进行端口定义,并说明输入输出 口,然后对模块的功能进行 描述。 Verilog HDL程序的书写格式自由,一行可 以写几个语句,一个语句也可以分写多行。 除了endmodule语句外,每个语句和数据定 义的最后必须有分号。 可以用/*.....*/和//.......对Verilog HDL程序的任何部分作注释。一个好的,有 使用价值的源程序都应当加上必要的注释, 以增强程序的可读性和可维护性。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
initial begin areg=0; //初始化寄存器areg for(index=0;index memory[index] =0; //初始化一个memory end 在这个例子中用initial语句在仿真开 始时对各变量进行初始化,注意这个初始 化过程不需要任何时间。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
宏定义字符串引用时,不要忘记,要用` 引 号 Include等编译预处理也必须用`引导,而不 是与C语言一样用#引导或不需要引导符; 关于阻塞和非阻塞的原则归纳总结:原则一 :时序电路建模时,用非阻塞赋值; 原则二:锁存器电路建模时,用非阻塞赋值; 原则三:用always块写组合逻辑时,采用阻 塞赋值;
MEITEC ChengDu Techno Center Co.,Ltd
例子三
module adder ( count,sum,a,b,cin ); input [2:0] a,b; input cin; output count; output [2:0] sum; assign {count,sum} = a + b + cin; endmodule
Verilog HDL 基础总结
明达科(成都)科技培训有限公司
MEITEC ChengDu Techno Center Co.,Ltd
Verilog语法的基本概念
Verilog程序是由模块构成的。每个模块的内 容都是位于module 和endmodule两个语句之 间。每个模块实现特定的功能。 模块是可以进行层次嵌套的。正因为如此才 可以将大型的的数字电路设计分割成不同的 小模块来实现特定功能。
always @(posedge CK or posedge RES ) begin if ( RES == 1’b1 ) Q <= 1’b0 ; else if ( EN == 1’b1 ) Q <= ~Q ; end assign CA = EN & Q ; endmodule
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
结构说明语句(initial,always语句) Task 和 function 说明语句 系统函数和任务
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
一个程序模块可以有多个initial和always 过程块; 每个initial和always说明语句在仿真的一 开始同时立即开始执行; initial语句只执行一次; always语句则是不断地重复活动着,直到仿 真过程结束;
MEITEC ChengDu Techno Center Co.,Ltd
例子一
module muxtwo (out, a, b, sl); input a,b,sl; output out; reg out; always @ (sl or a or b) if (!sl) out = a; else out = b; endmodule
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
$stop 和$finish常用在测试模块的 initial模块中,配合时间延迟用来控制仿 真的持续时间; $random在编写测试程序是十分有用的,可 以用来产生边沿不稳定的波形,和随机出现 的脉冲; $readmem在编写测试程序是也十分有用,可 以用来生成给定的复杂数据流.
MEITEC ChengDu Techno Center Co.,Ltd
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
always语句后跟着的过程块是否运行,则 要看它的触发条件是否满足,如满足则运 行过程块一次,再次满足则再运行一次, 直至仿真过程结束; 在一个模块中,使用initial和always语句 的次数是不受限制的,它们都是同时开始 运行的; task和function语句可以在程序模块中的 一处或多处调用;
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
系统任务$monitor 时间度量系统函数$time 系统任务$finish $stop $readmemb $readmemh $random 编译预处理(宏定义;文件包含处理;时间尺 度;条件编译命令)
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之四
Always的时间控制可以是沿触发也可以是 电平触发,可以是单个信号也可以是多个信 号,中间需要用关键字OR 连接; 沿触发的always块常常描述时序行为,如有 限状态机; 电平触发的always块常常用来描述组合逻 辑电路; $display 和$write的格式需要注意;
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之一
模块的结构(模块端口定义;模块内容) 数据类型及其常量和变量 运算符及表达式
MEITEC ChengDu Techno Center Co.,Ltd
ቤተ መጻሕፍቲ ባይዱ
常用Verilog语法之一
在Verilog模块中所有过程块(initial, always)、连续赋值语句、实例引用都是 并行的; 他们表示的是一种通过变量名互相连接的 关系 在同一模块中这三者出现的先后顺序没有 关系。 只有连续赋值的语句assign和实例引用语 句可以独立与过程块而存在于模块功能定 义部分。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之五
在多模块调试的情况下,$monitor需配合 $monitoron 与$monitoroff使用 $monito与$display的不同之处在于 $monitor是连续监视数据的变化, 因而往 往只要在测试模块的initial块中调用一次 就可以监视被测试的所以感兴趣的信号,不 需要也不能在always过程中调用$monitor $time常用在$monitor中,用来做时间标记
MEITEC ChengDu Techno Center Co.,Ltd
Verilog语法的基本概念
如果每个模块都是可以综合的,通过综合 工具可以把它们的功能描述全都转换为最 基本的逻辑单元描述,最后可以用一个上 层模块通过实例引用把这些模块连接起来 ,把它们整合成一个很大的逻辑系统。 Verilog 模块可以分为两种类型:一种是 为了让模块最终能生成电路结构,另一种 只是为了测试所设计的电路其逻辑功能是 否正确。
module EN, Q, CA ) ; input output reg test ( CK, RES, ; CK , RES, EN Q, CA ; Q ;
4 选一
4 to 1 seleclter (use function case) module test(din, sel, dout ) ; input [3:0] din ; input [1:0] sel ; output dout ; function select ; input [3:0] din ; input [1:0] sel ; case (sel) 2'h0: select = din[0] ; 2'h1: select = din[1] ; 2'h2: select = din[2] ; 2'h3: select = din[3] ; default select = 1'bx ; endcase endfunction assign dout = select ( din, sel ) ; endmodule
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之一
被实例引用的模块,其端口可以通过不同 名的连线或寄存器类型变量连接到别的模 块相应的输出输入信号端。 在always块内被赋值的每一个信号都必须 定义成reg型。
MEITEC ChengDu Techno Center Co.,Ltd
MEITEC ChengDu Techno Center Co.,Ltd
练习
分别使用如下方式设计一个3输入或门 or3: 连续赋值 原语调用 UDP 过程赋值
MEITEC ChengDu Techno Center Co.,Ltd
练习
设计一个对同步输入码流中“10110”序列 的检测电路 完成一个8位的双向移位寄存器的设计。要 求能够在控制信号和时钟的共同作用下进 行并行输入、左移和右移操作。其中的左 移与右移操作都是用外来数据位填充移空 位的。
MEITEC ChengDu Techno Center Co.,Ltd
常用Verilog语法之三
条件语句(if_else ,case) 循环语句(forever,repeat,while,for)
MEITEC ChengDu Techno Center Co.,Ltd
例子程序
If else 语句
MEITEC ChengDu Techno Center Co.,Ltd
例子二
module muxtwo (out, a, b, sl); input a,b,sl; output out; not u1(ns1,sl); and #1 u2(sela,a,nsl); and #1 u3(selb,b,sl); or #2 u4(out ,sela,selb); endmodule