veriloghdl数字设计与综合答案 联系客服

发布时间 : 星期一 文章veriloghdl数字设计与综合答案更新完毕开始阅读4508b77ff9c75fbfc77da26925c52cc58bd690f7

veriloghdl数字设计与综合答案

【篇一:verilog习题选答】

txt>答:fpga中,由程序来转换为可烧录的二进制码。ic设计中,主要是由design-compiler来实现。

2.能否说模块相当于电路图中的功能模块,端口相当于功能模块的 3.assign声明语句,实例元件,always块,这三类描述中哪一种直接与电路结构有关?

4.由连续赋值语句(assign)赋值的变量能否是reg型的? 答:赋值运算分为连续赋值和过程赋值两种。

(1) 连续赋值 连续赋值语句只能对线网型变量进行赋值,而不能对寄存器型变量进行

赋值,基本的语法结构为:assign #(延时量) 线网型变量名 = 赋值表达式; 一个线网型变量一旦被连续赋值语句赋值后,赋值语句右端赋值表达式的值将持续对赋值变量产生连续驱动,只要右端表达式任一操作数的值发生变化,就会立即触发对赋值变量的更新操作。 (2) 过程赋值 过程赋值主要用于两种结构化模块(initial和always)中的赋值语句。

在过程块中只能使用过程赋值语句,不能在过程块中出现连续赋值语句,同时过程赋值语句也只能用在过程赋值模块中。基本的语法结构为:被赋值变量赋值操作符赋值表达式,其中,赋值操作符是“=”或“=”,它分别代表了阻塞赋值和非阻塞赋值类型。过程赋值语句只能对寄存器类型的变量进行赋值,经过赋值后,上面这些变量的值将保持不变,直到另一条赋值语句对变量重新赋值为止。

5.如果都不带时间延迟、阻塞和非阻塞赋值有何不同?说明它们的不同点? 答:代码1:

module test(a,b,c,d,y); //两个与逻辑,1个或逻辑 input a,b,c,d; output y;

reg y,tmp1,tmp2;

always @(a or b or c or d)// y的值并不等于当前的tmp1,tmp2相或的值,而是等于上 begin一次运算时tmp1,tmp2相或的值。相当于一个延迟,在第2 tmp1 = ab; 次always模块运行完后得到想要的y值 tmp2 = cd;

y = tmp1|tmp2; endendmodule

代码2: 基本与代码1一样,只是在always的敏感列表中加入了temp1,temp2

module test(a,b,c,d,y); input a,b,c,d; output y;

reg y,tmp1,tmp2;

always @(a or b or c or d or tmp1 or tmp2)//与代码一不同, begin

tmp1 = ab; tmp2 = cd;

y = tmp1|tmp2; end

endmodule

代码3:在代码2中加进参数j,来帮助判断always模块的运行次数:

module test(a,b,c,d,y); input a,b,c,d; output y;

reg y,tmp1,tmp2; reg [8:0]j=0;

always @(a or b or c or d or tmp1 or tmp2) begin j = j + 1;

#5 //这里加了一个延时,方便分析 tmp1 = ab; 延迟消失了。 tmp2 = cd;

y = tmp1|tmp2; end

endmodule

首先j从0增至1,为阻塞赋值,然后延迟5,开始下面的非阻塞赋值,然后temp1,temp2得到了新的值,但是y还是并没有更新,而是和代码一中一样保持。第一次always执行完毕。由于temp1的值得到了更新,随即再次运行always模块,j从1增加到2,然后延迟5,而此时a,b,c,d的值没有变,因此temp1,temp2没有变

化,但是y却得到了第一次temp1,temp2变化后相或的值,发生跳变。

由上可以看出,本来只要1次就能完成的组合逻辑,由于采用了非阻塞赋值,仿真器不得不两次进入always模块,因此可以遵循这样的原则,写组合逻辑的时候,always中要用阻塞赋值,写时序逻辑的时候,always模块中要用非阻塞赋值。(当然不排除为了特殊的目的不遵循这个建议)

6.defparam命令的使用,模块实例化和模块引用

在一个模块中改变另一个模块的参数时,需要使用defparam命令,高层模块可以改变低层模块用parameter定义的值,改变低层模块的参数值有以下方式:

(1) defparam 层次路径 = 改变后的值 (见书本32页)

(2) 实例化时传递参数模块名 #(改变后参数的值) 实例名 (输入输出) 可以利用defparam命令定义参数,语法结构为: 模块名 例化模块名 (输入输出);

defparam 例化模块名. 参数名=value;

模块实例引用时参数的传递还可以利用特殊符号“#”,语法结构为: 模块名 # (改变后的参数值)例化模块名 (输入输出端口) 7.同步清零d触发器和异步清零d触发器

module dff_tongbu (q,d,clk,clr);//同步清零受时钟控制 input d,clk,clr; output q; reg q;

always @(negedge clock) if (clr) q=0; else q=d; endmodule

module dff_yibu(q,d,clk,clr);//异步清零不受时钟控制 input d,clk,clr; output q; reg q;

always @(clr)

if (clr) q=0;else q=d;

使用同步清零d触发器输出一个周期为10个时间单位的时钟信号: 8. 敏感变量的描述完备性

verilog中,用always模块设计组合逻辑电路时,在赋值表达式右端参与赋值的所有信号都必须在always@敏感列表中列出。如果在赋值表达式右端引用了敏感列表中没有列出的信号,在综合时会为没有列出的信号隐含地产生一个透明锁存器,这是因为该信号的变化不会立即引起所赋值的变化,而必须要等到敏感列表中的某个信号发生变化时,它的作用才表现出来,相当于存在一个透明锁存器,把该信号的变化暂存起来。

【篇二:fpga习题集及参考答案】

一、 填空题

1. 一般把eda技术的发展分为()个阶段。

2. fpga/cpld有如下设计步骤:①原理图/hdl文本输入、②适配、③功能仿真、④综合、

⑤编程下载、⑥硬件测试,正确的设计顺序是①()⑤⑥。

3. 在eda工具中,能完成在目标系统器件上布局布线的软件称为()。

4. 设计输入完成之后,应立即对文件进行()。

5. 基于硬件描述语言的数字系统设计目前最常用的设计方法称为()设计法。

6. 将硬件描述语言转化为硬件电路的过程称为()。

7. ip核在eda技术和开发中具有十分重要的地位,以hdl方式提供的ip被称为() ip。

8. soc系统又称为()系统。sopc系统又称为()系统。 9. 将硬核和固核作为()ip核,而软核作为()ip核。

10. ip核在eda技术和开发中具有十分重要的地位,以hdl方式提供的ip被称为()。

11. hdl综合器就是逻辑综合的过程,把可综合的vhdl/verilog hdl转化成硬件电路时,

包含了三个过程,分别是()、()、()。

12. eda软件工具大致可以由五个模块构成,分别是设计输入编辑器、()、()、 ()和()。

13. 按仿真电路描述级别的不同,hdl仿真器分为()仿真、()仿真、()

仿真和门级仿真。