Verilog 复习考试总结

合集下载

Verilog学习总结

Verilog学习总结

顺序块和并行块
语句是顺序执行的 parameter d=50; reg[7:0] r; begin #d r='h35; #d r='hE2; #d r='h00; #d r='hF7; #d ->end_wave; end 用顺序块和延时控制组合来产生一个时序波形 并行块是语句同时执行的
起始时间和结束时间
在并行块和顺序块中都有一个起始时间和结 束时间的概念。对于顺序块,起始时间就是 第一条语句开始被执行的时间,结束时间就 是最后一条语句执行结束的时间。而对于并 行块来说,起始时间对于块内所有的语句是 相同的,即程序植程控制进入该块的时间, 其结束时间是按时间排序在最后的语句执行 结束的时间。
条件语句
数字
整数 有二、八、十、十六进制 <位宽>’<进制><数字>,这是一种全面的描述方式 缺省的位宽由具体的机器系统决定,至少是32位 缺省的进制为十进制 x表示不定值,z代表高阻值,z还可以用?代替 4'b10x0 //位宽为4的二进制数从低位数起第二位为不定值 4'b101z //位宽为4的二进制数从低位数起第一位为高阻值 12'dz //位宽为12的十进制数,其值为高阻值 12'd? //同上 8'h4x //位宽为8的十六进制数,其低4位值为不定值 要表示负数的话只需在位宽表达式前加一个减号 两个不同数据宽度的变量操作时,自动右对齐操作。特别是赋 值操作。
数据类型
Verilog HDL中总共有19种数据类型 4 个最基本的数据类型:integer型、parameter 型、reg型和wire型。其他的类型有large型、 medium型、scalared型、 time型、small型、 tri型、trio型、tril型、triand型、trior型、 trireg型、vectored型、wand型和wor 型。

Verilog 复习考试总结

Verilog 复习考试总结

3Verilog1.Verilog HDL是一种硬件描述语言,用于从算法级、RTL级、门级到开关级的多种抽象设计层次的数字系统建模。

令行为级描述:数据结构和过程类似C;用于描述算法级和RTL级的Verilog模型。

令结构级描述:用于描述门级和开关级电路;特点:支持门级延时信息和驱动能力等的描述。

VHDL侧重于系统级描述,从而更多的为系统级设计人员所采用;Verilog侧重于电路级描述,从而更多的为电路级设计人员所采用。

2. Verilog HDL设计入门模块(module)模块是Verilog 的基本描述单位模块的定义从关键词module开始,到关键词endmodule结束每条Verilog HDL语句以分号“;”作为结束模块的基本结构(1)、模块定义行以module开头接着给出所定义模块的;模块名括号内给出端口名列表(端口名等价于硬件中的外接引脚,模块通过这些端口与外界发生联系)以分号结束(2)、端口类型说明端口类型只有input、output、inout三种(3)、数据类型说明支持的数据类型有连线类(wire)和寄存器(reg)类两个大类一位宽的wire类可被缺省外,其它凡将在在后面的描述中出现的变量都应给出相应的数据类型说明(4)、描述体部具体)展开对模块的描述(5)、结束行用关键词endmodule标志模块定义的结束它的后面没有分号令行为描述(Behavior)描述行为或功能特性令结构描述(Structure)描述通过什么样的结构方式将不同的实体连接起来用以实现所要求的行为或功能。

测试与仿真令测试平台(Test Bench):在输入端口加入测试信号,从输出端口检测其输出结果是否正确。

令通常将需要测试的对象称之为DUT (Device Under Test)。

令测试模块:要调用DUT;包含用于测试的激励信号源;能够实施对输出信号的检测,并报告检测的结果。

过程语句令Initial:只顺序地执行一次;没有触发条件。

verilog课程期末总结

verilog课程期末总结

verilog课程期末总结一、引言Verilog(硬件描述语言)是一种用于描述电子系统的硬件结构和行为的语言,它广泛用于设计和验证数字电路,尤其是在集成电路和FPGA设计中。

在本学期的Verilog课程中,我们学习并实践了Verilog语言的基本概念和设计技巧,通过实验和项目开发,我们对Verilog语言的使用和应用有了更深入的了解。

本文将对这门课程进行总结,包括所学内容、实践经验以及未来的发展方向。

二、课程内容回顾本学期的Verilog课程共包含以下几个部分的内容:1. Verilog的基本语法和数据类型:在这个部分,我们学习了Verilog的基本语法,如模块定义、端口声明、数据类型定义等。

我们了解了如何使用Verilog语言进行模块化设计,利用不同的数据类型来描述数字电路中的信号和寄存器。

2. Verilog建模:这个部分教授了如何使用Verilog语言来建模和设计数字电路。

我们学习了组合逻辑和时序逻辑的建模方法,掌握了常用的门级建模和行为级建模技巧。

3. Verilog仿真:通过仿真可以验证我们设计的电路是否符合功能和时序的要求。

在这个部分,我们学习了如何使用Verilog语言进行仿真,以及如何编写仿真测试平台、编写仿真测试用例等。

通过仿真,我们可以对设计进行调试和验证,同时也方便了我们对电路性能和时序约束的分析。

4. Verilog项目开发:最后一个部分是课程的项目开发,通过一个实际项目的设计和实现,我们将所学的Verilog知识应用到实践中。

这个项目的设计还涉及模块间的通信和数据处理等方面,对我们综合运用所学知识的能力提出了更高的要求。

三、实践经验总结在学习和实践Verilog语言的过程中,我积累了一些宝贵的经验。

以下是我总结的几点实践经验:1. 充分理解和熟练掌握语法规则:Verilog语言的语法规则对于我们正确理解和使用这门语言非常重要。

通过不断的练习和实践,我渐渐熟练掌握了Verilog的语法规则,如模块的定义、端口的声明、数据类型的使用等。

VerilogHDL期末考试复习题

VerilogHDL期末考试复习题

VerilogHDL期末考试复习题【第一章】1、FPGA 芯片的发展主要体现在哪几个方面?未来的发展趋势是什么?答:新型芯片的规模越来越大,成本越来越低,低端的FPGA已逐步取代了传统的数字元件。

先进的ASIC生产工艺已经被用于FPGA的生产,越来越丰富的处理器内核被嵌入到高端的FPGA芯片中,基于FPGA的开发成为一项系统级设计工程。

随着半导体制造工艺的不同提高,FPGA的集成度将不断提高,制造成本将不断降低,其作为替代ASIC来实现电子系统的前景将日趋光明。

2、EDA 技术的优势是什么?答:1.用HDL对数字系统进行抽象的行为与功能描述以及具体的内部线路结构描述,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,可以大大降低设计成本,缩短设计周期。

2.EDA工具之所以能够完成各种自动设计过程,关键是有各类库的支持。

3.某些HDL也是文档型的语言,极大地简化了设计文档的管理。

4.EDA具有日益强大的逻辑设计仿真测试技术,极大地提高了大规模系统电子设计的自动化程度。

5.基于EDA技术的设计,由于用HDL表达的成功的专用功能设计在实现目标方面有很大的可选性,它既可以用不同来源的通用FPGA/CPLD实现,也可以直接以ASIC来实现,设计者拥有完全的自主权。

6.EDA技术的设计语言是标准化的,不会由于设计对象的不同而改变;它的开发工具是规范化的,EDA软件平台支持任何标准化的设计语言;它的设计成果是通用性的,IP核具有规范的接口协议。

良好的可移植与可测试性,为系统开发提供了可靠的保证。

7.EDA技术能将所有设计环节纳入统一的自顶向下的设计方案中。

8.EDA不但在整个设计流程上充分利用计算机的自动设计能力,在各个设计层次上利用计算机完成不同内容的仿真模拟,而且在系统板设计结束后仍可利用计算机对硬件系统进行完整全面的测试。

3、EDA 的设计流程包括哪几个环节?ANS: ①设计输入(原理图/HDL 文本编辑)②综合③FPGA/CPLD 适配④时序仿真与功能门级仿真⑤FPGA/CPLD 编程下载⑥FPGA/CPLD 器件电路硬件检测。

verilog期末知识点总结

verilog期末知识点总结

verilog期末知识点总结Verilog是一种硬件描述语言(HDL),用于描述数字电路。

它适用于设计和验证数字电路,以及编写仿真测试程序。

本文将总结Verilog的一些重要知识点,包括语法结构、模块化设计、时钟和同步电路、测试和调试等内容。

1. 语法结构Verilog的语法结构类似于C语言,包括模块声明、信号声明、组合逻辑和时序逻辑描述等。

模块声明以module关键字开始,用于定义一个模块,并使用endmodule结束。

信号声明包括输入、输出和内部信号,可以使用wire或reg关键字定义。

组合逻辑描述使用assign关键字和逻辑运算符描述输出信号与输入信号的关系。

时序逻辑描述使用always块和@关键字描述时钟触发事件,以及使用去块开始描述触发事件发生时的行为。

2. 模块化设计Verilog支持模块化设计,可以通过实例化和连接模块来完成整个电路的设计。

模块包括顶层模块和子模块,通过端口连接来进行通信。

顶层模块可以实例化多个子模块,并且可以在端口上进行信号连接,以及进行层次化的设计。

模块化设计可以提高代码的可读性和维护性,以及方便进行功能调试和验证。

3. 时钟和同步电路Verilog中的时序逻辑是通过时钟触发事件来控制的,常用的时钟触发事件是posedge和negedge,用于描述信号的上升沿和下降沿。

时序逻辑通常包括寄存器、时钟、复位和延迟等内容。

同步电路是一种使用时钟控制的电路,用于避免因异步时序引起的问题,如时序冲突和信号竞争等。

Verilog中可以使用always块和@关键字,以及使用posedge和negedge关键字来描述同步电路的行为。

4. 测试和调试Verilog支持使用仿真工具来进行电路的测试和调试。

常用的仿真工具包括ModelSim、VCS、NCVerilog等,可以对Verilog代码进行仿真、波形查看和时序约束验证等。

在进行测试和调试时,可以使用testbench来模拟输入信号,以及使用检验器来验证输出信号。

Verilog语法知识点总结(转)

Verilog语法知识点总结(转)

Verilog语法知识点总结(转)1.1 概述条⽬说明分类1>> ⾯向设计的语句; // 可综合。

2>> ⾯向测试的语句; //testbench ,不可综合。

特点设计语句 assign , always ,模块例化,都对应实际电路,并⾏执⾏。

构造1.2 模块 Module条⽬说明模块名(端⼝列表)整个电路的外特性,抽象为⿊盒⼦;端⼝⽅向input , output ; inout ;端⼝类型wire , reg ;端⼝类型是 wire 时可以省略。

例: input a ; // 端⼝⽅向为输⼊,类型默认为 wire ;1.3 数据类型1.3.1 wire/reg 线⽹wire 和 reg 都是线类型,⼯程上没区别;只是 always/initial 模块中输出定义需要为 reg 型;注意:不要将 reg 类型与 D 触发器混淆, reg 理解为因为代码所产⽣的。

例如:wire [7:0] a; // 定义了 8 位的 wire 型数据wireb; // 定义了 1 位的 wire 型数据reg [3:0]sum ; // 定义了⼀个 4 位的 reg 型数据1.3.2 常量类型格式说明parameter parameter 数据名 = 表达式parameterMSB = 7 ;// 定义参数 MSB 为常量 7 ;推荐⼤写;常量< 位宽 >< 进制 >< 数字 >⼆进制: B 或 b ;⼗进制: D 或 d ;⼋进制: O 或 o ;⼗六进制: H 或 h ;8’b1010_1100 (‘b 表⽰⼆进制 )下画线“ _”, 提⾼阅读性。

< 数字 >默认⼗进制;4 值逻辑0 : Logic Low低电平;1 : Logic High⾼电平;x : Unknow ;不确定;z : High Impedance ;⾼阻态; // 三态门1.4 运算符1.4.1 概述运算符说明算术运算符+ ( 加 ) , - (减), * (乘), / (除), % (取模);每个运算符在电路中都是个模块,如加法器,减法器;!注意:除法,除 2^n ,是移位运算,浮点运算就复杂了,因此浮点运算要专⽤除法器;关系运算符>, <, >=, <= , == (相等),! = (不相等);逻辑运算符&& (逻辑与) . || (逻辑或) , ! (逻辑⾮);条件判断语句中,为避免歧义,逻辑运算符⼆边推荐为 1bit ;位运算符& (与), | (或), ~ (⾮) , ^ (异或) ; ~^ (同或);移位运算符<< (左移), >> (右移);归约操作& , ~& , | , ~| , ^, ~^;//unary reduction ;条件运算符?:拼接运算符{}//{3{a[0]}}: 代表 3 根同样的 a[0] 线, {a[0],a[0],a[0]} 1.5 设计语句1.5.1 assign (连续赋值)实例说明assigny = ~ b ;assign out = a==1 && c==1 ;assign f =sel ? a : b ;>> 实现可以⽤布尔函数描述的组合逻辑电路;>>“=” 后⾯可以是任何布尔函数;>> 并⾏执⾏;典型错误 1 :assigna = b + a;避免出现反馈电路:变为了不可知时序逻辑电路;1.5.2 always (过程块)a、赋值赋值⽅式说明= ,阻塞赋值always @ ( a or b or C or … )begin语句块( = , if 语句, case 语句)end实现:组合逻辑电路;(注意!禁⽌⽤于时序逻辑电路)always 块内,阻塞赋值:是顺序执⾏(类似 C );敏感表: @ ( * ) //“*” ⾃动添加相关输⼊信号;敏感表: @ ( * ) //“*” ⾃动添加相关输⼊信号;避免出现 Latch (锁存器)分⽀语句( if 语句, case 语句)条件不满时,会在电路中⾃动⽣成锁存器来保存不满⾜条件的值,因此要补全 if-else ,和 case 的 defalut 语句;<= ,⾮阻塞赋值always @ ( posedge clk or negedge rst_n )begin语句块( <= , if 语句, case 语句)end实现:时序逻辑电路;(注意!禁⽌⽤于组合逻辑电路)always 块内,阻塞赋值:并⾏执⾏;b、if 语句条⽬说明格式 1if( 条件 )begin 语句 1;语句 2 ;endelse begin语句 1 ;语句 2 ;end格式 2if( 条件 )begin 语句 1;语句 2 ;endelse if begin 语句 1 ;语句 2 ;endelse begin语句 1 ;语句 2end特点分⽀语句,各个分⽀条件不同;顺序执⾏判断;注意if-else 成对使⽤;c、case 语句条⽬说明格式case( 表达式 )常量表达式 1:begin 语句;end常量表达式 2:begin 语句;end常量表达式 3:begin 语句;enddefault :语句;endcase特点分⽀语句,各个分⽀条件相同;并⾏执⾏判断;注意default 语句不可省略;d、代码 & 硬件条⽬说明映射赋值语句 -> 逻辑函数; // 加法器,减法器等;边沿型条件分⽀ -> D 触发器;条件分⽀ -> 多路选择器;⽰例1.5.3 模块例化a、作⽤系统设计时,建议遵循以下设计原则:b、常见的典型错误如下所⽰:1.5.4 全加器全加器顶层: w1 , w2 , w3 :模块之间连线;半加强: 2 种描述⽅法,如下:描述⽅式描述⽅式说明位置关联AND u1(a, b, and_out);名字关联AND u1(.a(a), .b(b), .o ( and_out ) ); // 推荐使⽤1.6 测试语句1.6.1 结构Testbench1.6.2 特殊符号语句说明`< 标识符 >表⽰:编译引导语,⽤于指导仿真编译器在编译时采取⼀些特殊处理;编译引导语句⼀直保持有效,直到被取消或重写;`timescale `timescale < 时间单位 >/< 时间精度 >例 1 :`timescale 1ns/1ns // 时间单位 1ns ;时间精度 1ns ;#2 // 延时 2 ×1=2ns ;#2.1// 延时 2.1 × 1 = 2.1ns, 精确到 1ns ,为 2ns ;例 2 :`timescale 1ns/100ps // 时间单位 1ns ;时间精度 100ps ;#2 // 延时 2 ×1= 2ns ;#2.1// 延时 2.1 × 1 = 2.1ns, 精确到 100s ,为 2.1ns ;`define`include`include “global.v”包含另⼀个⽂件,完整拷贝过来;`restall把所有设置的编译引导恢复到缺省状态;#<num>;#10; // 延迟 10 个时间单位1.6.3 语句语句说明initial 块语句:只执⾏⼀次, always 循环执⾏;不可综合;作⽤:initial产⽣激励信号;检查输出波形;赋初值;forever // 产⽣周期信号:intial beginclk = 0 ;forever#10 clk = ~clk; // 时钟信号end1.6.4 系统任务和函数条⽬说明$< 标识符 >表⽰ Verilg 的系统任务和函数$time当前的仿真时间$display 显⽰信号值变化:只执⾏⼀次,打印当前时刻;$display($time, “b% %b %b” , rst,clk,dout);$monitor 监视信号值变化:所有过程时刻;$monitor($time, “b% %b %b” , rst,clk,dout);$stop暂停仿真$finish结束仿真,释放电脑资源;1.7 代码模板1.7.1 组合逻辑电路条⽬说明assign assign add_cnt = flag==1; // ⽤于简单的组合逻辑电路;always always @(*)begin// 统⼀采⽤“ *” 为敏感列表;( =,if,case )语句; // 只能使⽤“ =” 赋值end1.7.2 时序逻辑电路a、计数器模板 13 段式模板模板 1always @( posedge cllk or negedge rst_n) begin1计数段always @( posedge cllk or negedge rst_n) begin if (!rst_n)cnt <= 0; // 初值规定为 0else if (add_cnt)begin// 【位置 1 】if(end_cnt)cnt <= 0;elsecnt <= cnt + 1;endend2加 1 条件assingadd_cnt = d==1; //d==1 :什么时候开始数脉冲3结束条件assing end_cnt = add_cnt&& cnt == X-1; // X: 数多少个脉冲b、计数器模板 23 段式模板模板 11计数段always @( posedge cllk or negedge rst_n) begin if (!rst_n)cnt <= 0; // 初值规定为 0else if (add_cnt) begin// 【位置 1 】if(end_cnt)cnt <= 0;elsecnt <= cnt + 1;endelsecnt <= 0; // 不连续,需要清 0 时,使⽤模板 2 ;end2加 1 条件assingadd_cnt = d==1; //d==1 :什么时候开始数脉冲3结束条件assing end_cnt = add_cnt&& cnt == X-1; // X: 数多少个脉冲c、 4 段式状态机模板段号代码// 初始化,次态赋值给现态,明确当前状态;1always @(posedge clk or negedge rst_n) begin if(!rst_n)state_c <= S00;// 初始状态elsestate_c <= state_n;end2always @( * ) begin // 组合逻辑,描述状态转换⽬标case(state_c)S00: beginif(s00_s20_start) // 条件名 S00->S20state_n = S20;elsestate_n = state_c; // ⽅便拷贝endS20: beginif(s20_s21_start)state_n = S21;elsestate_n = state_c;endS21: beginif(s21_s00_start)state_n = S00;elsestate_n = state_c;enddefault: beginstate_n = S00;endendcaseend3// 具体的转换条件内容assign s00_s20_start = state_c==S00&& ( 条件 ) ;assign s20_s21_start = state_c==S20&& ( 条件 ); assign s21_s20_start = state_c==S21&& ( 条件 );4根据转态设计输出:1 个 always 设计 1 个输出信号;1.7.3 Testbencha、框架条⽬内容模块名`timescale 1 ns/1 nsmodule testbench_name();信号定义reg clk ; // 时钟reg rst_n; // 复位reg[3:0] din0 ; //uut 的输⼊信号,定义为 reg 型,在 initial 中reg din1 ;wire dout0;//uut 的输出信号,定义为 wire 型wire[4:0] dout1;parameter CYCLE = 20; // 参数定义,⽅便修改;parameter RST_TIME = 3 ;待测模块例化module_name uut( // 统⼀采⽤名字关联.clk ( clk ),.rst_n ( rst_n ),.din0 ( din0 ),.din1 ( din1 ),.dout0 ( dout0 ),.dout1 ( dout1 ));激励产⽣// 复位,时钟,等显⽰输出结果$display // 类似 printf ;b、复位复位initial beginrst_n = 1;#2;rst_n = 0;#(CYCLE*RST_TIME);rst_n = 1;endc、仿真时钟仿真时钟initial beginclk = 0;forever#(CYCLE/2)clk=~clk;endd、激励信号激励信号initial begin#1;// ⽅便观测din1 = 0; // 赋初值#(10*CYCLE);// 开始赋值end以上就是总结的 Verilog 语法相关知识点,转⾃明德扬论坛。

EDA-Verilog HDL期末复习题总结必过

EDA-Verilog HDL期末复习题总结必过

选择题1.大规模可编程器件主要有FPGA、CPLD 两类,下列对FPGA 结构与工作原理的描述中,正确的是(C)。

A.FPGA 全称为复杂可编程逻辑器件;B.FPGA 是基于乘积项结构的可编程逻辑器件;C.基于SRAM 的FPGA 器件,在每次上电后必须进行一次配置;D.在Altera 公司生产的器件中,MAX7000 系列属FPGA 结构。

2.不完整的IF语句,其综合结果可实现(A)A. 时序逻辑电路B.组合逻辑电C. 双向电路D. 三态控制电路3.综合是EDA设计流程的关键步骤,在下面对综合的描述中,(D)是错误的。

A.综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;B.综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;C.为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;D.综合可理解为一种映射过程,并且这种映射关系是唯一的,即综合结果是唯一的。

4.大规模可编程器件主要有FPGA、CPLD两类,下列对FPGA结构与工作原理的描述中,正确的是( C )。

A.FPGA全称为复杂可编程逻辑器件;B.FPGA是基于乘积项结构的可编程逻辑器件;C.基于SRAM的FPGA器件,在每次上电后必须进行一次配置;D.在Altera公司生产的器件中,MAX7000系列属FPGA结构。

5.以下关于状态机的描述中正确的是(B)A.Moore型状态机其输出是当前状态和所有输入的函数B.与Moore型状态机相比,Mealy型的输出变化要领先一个时钟周期C.Mealy型状态机其输出是当前状态的函数D.以上都不对6.目前应用最广泛的硬件描述语言是(B)。

A. VHDLB. Verilog HDLC. 汇编语言D. C语言7.一模块的I/O 端口说明:“input [7:0] a;”,则关于该端口说法正确的是( A )。

A. 输入端口,位宽为8B. 输出端口,位宽为8C. 输入端口,位宽为7D. 输出端口,位宽为78.基于EDA 软件的FPGA / CPLD 设计流程为:原理图/HDL 文本输入→综合→___ __→→适配→编程下载→硬件测试。

Verilog总结复习题 副本

Verilog总结复习题  副本

Verilog复习题一、填空题1. 用 EDA 技术进行电子系统设计的目标是最后完成2. 可编程器件分为_CPLD_ 和 __FPGA__ 。

3. 随着 EDA 技术的不断完满与成熟,_自顶向下_ ASIC的设计与实现。

_的设计方法更多的被应用于Verilog HDL设计中间。

4.当前国际上较大的 PLD 器件制造公司有 _ALtera_ 和 _Xilinx_ 公司。

5.完满的条件语句将产生 _组合 _电路,不完满的条件语句将产生_时序 _电路。

6.拥塞性赋值符号为___=____ ,非拥塞性赋值符号为 ____<=_______ 。

7.有限状态机分为 __Moore__ 和 _Mealy_ 两各种类。

8、 EDA 缩写的含义为电子设计自动化 (Electronic Design Automation)_ _9.状态机常用状态编码有_二进制 _、_格雷码 _和 _独热码 _。

10. Verilog HDL中任务能够调用_其他任务 _和__函数 __。

11.系统函数和任务函数的首字符标志为_$_,预编译指令首字符标志为__#__。

12.可编程逻辑器件的优化过程主若是对___速度 ___和 __资源 __的办理过程。

13、大型数字逻辑电路设计采用的IP 核有 __软 IP__、__固 IP___和 __硬 IP__。

二、选择题1、已知“a =1b’ 1; b=3b'001;”那么{a,b}=(C)(A) 4b'0011 (B) 3b'001 (C) 4b'1001 (D) 3b'1012、在 verilog中,以下语句哪个不是分支语句?(D)(A) if-else (B) case (C) casez (D) repeat3、 Verilog HDL语言进行电路设计方法有哪几种(①自上而下的设计方法(Top-Down )②自下而上的设计方法(Bottom-Up )8 分)③综合设计的方法4、在 verilog 语言中, a=4b'1011,那么&a= ( D)(A) 4b'1011 (B) 4b'1111 (C) 1b'1 (D) 1b'05、在 verilog 语言中整型数据与( C )位寄存器数据在实质意义上是相同的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。







算术运算符: 1、加法运算符; +,实现加法运算 4、除法运算符; /, 实现除法运算 2、减法运算符; -,实现减法运算 5、取模运算符; %,实现取模运算 3、乘法运算符; ×,实现乘法运算 在算术运算操作中,操作数是作为一个整体参与运算的,因而,如果某个操作数的某一位为 不定态(x 值) ,则整个表达式的运算结果也为不定态。 位运算符: 按位取反运算符:~ 按位异或运算符:^ 按位与运算符:& 按位同或运算符:^~或~^ 按位或运算符:| 缩位运算符: 单目运算符,按位进行逻辑运算,最后结果为一位的二进制数 缩位运算符包括: & ~| ^ (异或) | ~& ~^ or ^~ (同或) 逻辑运算符: 逻辑与运算符:&&(双目运算符) A = 6; A && B 1 && 0 0 逻辑或运算符: || (双目运算符) B = 0; A || !B 1 || 1 1 逻辑非运算符: ! (单目运算符) C = x; x 关系运算符: 1、小于:< 2、大于:> 3、小于等于:<= 4、大于等于:>= 结果是一位值:0,1 或 x 相等与全等运算符:
3 Verilog
1. Verilog HDL 是一种硬件描述语言,用于从算法级、RTL 级、门级到开关级的多种抽象设计层次的数字系统建模。 行为级描述:数据结构和过程类似 C;用于描述算法级和 RTL 级的 Verilog 模型。 结构级描述:用于描述门级和开关级电路;特点:支持门级延时信息和驱动能力等的描述。 VHDL 侧重于系统级描述,从而更多的为系统级设计人员所采用; Verilog 侧重于电路级描述,从而更多的为电路级设计人员所采用。 Verilog HDL 设计入门 模块(module) 模块是 Verilog 的基本描述单位 模块的定义从关键词 module 开始,到关键词 endmodule 结束 每条 Verilog HDL 语句以分号“; ”作为结束 模块的基本结构 ⑴、模块定义行 以 module 开头 接着给出所定义模块的模块名 括号内给出端口名列表(端口名等价于硬件中的外接引脚,模块通过这些端口与外界发生联系) 以分号结束 ⑵、端口类型说明 端口类型只有 input、output、inout 三种 ⑶、数据类型说明 支持的数据类型有连线类(wire)和寄存器(reg)类两个大类 一位宽的 wire 类可被缺省外,其它凡将在后面的描述中出现的变量都应给出相应的数据类型说明 ⑷、描述体部 具体展开对模块的描述 ⑸、结束行 用关键词 endmodule 标志模块定义的结束 它的后面没有分号 行为描述与结构描述 行为描述(Behavior)描述行为或功能特性 结构描述(Structure)描述通过什么样的结构方式将不同的实体连接起来用以实现所要求的行为或功能。 测试与仿真 测试平台(Test Bench) :在输入端口加入测试信号,从输出端口检测其输出结果是否正确。 通常将需要测试的对象称之为 DUT(Device Under Test) 。 测试模块:要调用 DUT;包含用于测试的激励信号源;能够实施对输出信号的检测,并报告检测的结果。 过程语句 Initial:只顺序地执行一次;没有触发条件。 Always: 当顺序执行到最后一条语句后,会自动返回到第一条语句重新开始执行,是一条没有穷尽的循环语句 往往带有触发条件 Verilog HDL 基础知识 基本词法定义 空白符 空白符是以下几种字符与控制符的总称:①空格、②TAB 键、③换行符、④换页符。 空白符起分隔符的作用:允许在一行内写多条 Verilog HDL 语句 注释行 单行注释:以“//”开始到行末结束,不允许续行 多行注释:以“/*” 开始,到“*/”结束,可以跨越多行,但不允许嵌套




实数及其表示 实数可以用十进制数表示,也可用指数表示。 在 verilog HDL 中, 实数可以参与的运算是受限制 的。 当实数被转换为整数时,是按四舍五入的方式进 行的。 字符串 定义:为两个双引号“”之间的字符;字符串不 允许跨行。 可通过前导的控制键(反斜杠及百分号)引入一些特殊字符 取名规则 必须是由字母(a~z, A~Z)或下划线开头,长度小于 1024 字符的一串字符序列 后续部分可以是字母( a~z, A~Z ) 、数字(0~9) 、下划线、$ 还可以是反斜杠“\”开头,并以空白符结尾的任何字符序列。但反斜杠本身及空白符都不属标识符 组成部分 系统命令行中的内容只是为了便于阅读理解 在必要的地方增加适当的注释说明,在 HDL 编程中尤为重要 有些操作控制命令以注释行的方式出现在 HDL 描述中,它不影响 HDL 的仿真,但其它工具可以识 别这些控制命令 四种逻辑状态 Verilog HDL 需要用数字或字符去表达在数字电路中存储与传送的逻辑状态。 0 1 逻辑零、逻辑非、低电平 逻辑 1、逻辑真、高电平 x或X z或Z 不确定的逻辑状态 高阻态
宏替换定义本身以及用到宏替换的地方必须有撇号“`”作开头 模拟时间定标 对模拟器的时间单位及时间计算的精度进行定标 定义:`timescale<计时单位>/<计时精度> 计时单位与计时精度都由整数及相应的时间单位两部分组成 时间单位:S、ms(毫秒) 、us(微秒) 、Ns(纳秒) 、 ps(微微秒) 、Fs(毫微微秒) 时间精度:延迟时间的最小分辨率 计时单位必须大于等于精度单位 对 timescale 的定义必须在模块描述的外部进行 模拟器允许对不同模块定义不同的时标,但以最小的精度进行模拟计算 运算符 运算符的分类 单目运算符:只有一个操作数,且运算符位于操作数的左边 双目运算符:有两个操作数,各位于运算符的两边 三目运算符:属于这一类的只有条件运算符(? :)一个 运算符的优先级顺序



共有四种: 1、相等 运算符:== 4’b 1z0x == 4’b 1z0x x 2、不等 运算符:!= 4’b 1z0x != 4’b 1z0x x 3、全等 运算符:=== 4’b 1z0x === 4’b 1z0x 1 4、不全等运算符:!== 4’b 1z0x !== 4’b 1z0x 0 都是双目运算符,得到的结果是 1 位的逻辑值 相等算符: 逐位比较两个操作数相应位的值是否相等, 只有当每一位都相等时,相等关系才满足。如果任何 一个操作数中的某一位存在不定态或高阻态,则将得 到一个不定态的结果。 全等算符:将不定态或高阻态看作是逻辑状态的一种 而参与比较 逻辑移位运算符: 1、逻辑左移:<< 2、逻辑右移:>> Result is same size as first operand, always zero filled 例:a = 4’b1010; d = a >> 2; // d = 0010 c = a << 1; // c = 0100 连接运算符: 将两组或两组以上的信号用大括号括起来,拼接成一组新的信号。 对于一些重复信号的连接,可以用它的简化表示方法{n{a}},表示将信号 a 重复连接 n 次。 Operands must be sized !!(数的进制相同) 条件运算符: <条件运算符>?<条件为真时的表达式>:<条件为假时的表达式>:Assign out = (sel == 0) ? a :b 允许实型量参与的运算符 不允许实型量参与的运算符
斜体表示的是可缺省的部分 过程语句是指 Initial 或 always 事件控制敏感表只在 always 过程语句中出现,用于激活过程语句的执行 块语句标识符分 begin-end(串行块)与 fork-join(并行块)两类 块名和块内局部变量说明均为可选项 过程语句 Initial 与 always 1、 都是从模拟的 0 时刻开始执行,但 initial 过程语句后面的块语句沿时间轴只执行一次,而 always 则 循环地重复执行其后的块语句。 2、 initial 过程语句不带触发条件,因而必定从模拟的 0 时刻开始执行它后面的块语句;always 过程语句 则通常带有触发(激活)条件,只有当触发条件被满足时,其后的块语句才真正开始执行。如果触发 条件被缺省,则认为触发条件始终被满足。 3、 一个模块的行为描述中可以有多个 initial 与 always 语句,代表多个过程块的存在,它们之间相互独 立,并行运行。 Initial 过程语句 在实际的描述过程中,最经常地应用于测试模块中对激励向量的描述。 在对硬件功能模块的行为描述中,仅在必要时给寄存器变量赋以初值。 是一条主要面向模拟的过程语句,通常不为逻辑综合工具接受。 Always 过程语句 在测试模块中一般用于对时钟的描述,但更多地用于对硬件功能模块的行为描述。 功能模块的行为描述是由过程块构成的,每个过程块都要由过程语句所引导,因而每个功能模块 的行为描述中,至少存在一个 always 过程语句。 块语句 由块标识符 begin-end 或 fork-join 界定的一组行为描述语言。 过程块所要完成的具体操作内容,都是通过块语句中所包含的描述语句的执行而得以实现的。 串行块 begin-end 位于串行块中的各条语句按串行方式顺序执行 特点: 1、 串行块中的每条语句依据块中的排列次序,先后逐条顺序执行。块中每条语句给出的延时都是相 对于前一条语句执行结束的相对时间。 2、 串行块的起始执行时间就是串行块中第一条语句开始执行的时间。串行块的结束时间就是块中最 后一条语句执行结束的时间。 3、 串行块的行为描述可以形象地理解为硬件电路中,数据在时钟及控制信号作用下,沿数据通道的 各级寄存器之间的传送过程。 并行块 fork-join 位于并行块中的各条语句按并行方式同时执行 特点: 1、 并行块中的每条语句都是同时开始并行执行的,各条语句的执行过程与语句在块中的先后排列顺 序无关。块中每条语句给出的延时都是相对于并行块开始执行时的绝对时间。 2、 并行块的起始执行时间就是流程控制转入并行块的时间,并行块中的每条语句都是相对于这一时 间同时开始执行的。 并行块的结束时间就是并行块中按执行时间排序最后执行的一条语句结束的 时间。 3、 并行块的行为描述可以形象的理解为硬件电路上电后,各电路模块同时开始工作的过程。 有名块 Named-block 块是可以取名的,方法是在块语句开始标识符后面加上一个冒号,之后给出一个名字。 作用:①、便于实现对块语句执行过程的有效控制; ②、允许在块语句内部引入局部变量。 赋值语句 位于过程块中的赋值语句称之为过程赋值语句 过程赋值语句只能对寄存器类的量进行赋值
相关文档
最新文档