第4章 Verilog HDL设计初步习题 PPT

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

//测试文件,??部分请根据被测试的文件修改 module stimulus;
释为,对于不满足条件,跳过赋值语句Q<=Fra Baidu bibliotek不予执行,即意味着保持Q的原值
不变(保持前一次满足if条件时Q被更新的值)。对于数字电路来说,当输入改变后
试图保持一个值不变,就意味着使用具有存储功能的元件,就是必须引进时序元
件来保存Q中的原值,直到满足if语句的判断条件后才能更新Q中的值,于是便产
生了时序元件。
4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两 种方式。
module decoder3_8 ( G1 ,Y ,G2 ,A ,G3 ); input G1, G2, G3; wire G1, G2, G3; input [2:0] A ; wire [2:0] A ; output [7:0] Y ; reg [7:0] Y ; reg s; always @ ( A ,G1, G2, G3)
else if (A==3'b101)Y=8'b11011111;
else if (A==3'b110)Y=8'b10111111;
else if (A==3'b111)Y=8'b01111111;
else
Y=8'bxxxxxxxx;end
end
endmodule
大家应该也有点累了,稍作休息
大家有疑问的,可以询问和交流
endmodule
4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两 种方式。
module decoder3_8 ( G1 ,Y ,G2 ,A ,G3 );
input G1, G2, G3;
wire G1, G2, G3;
input [2:0] A ;
module LATCH1 (CLK, D, Q);
output Q;
input CLK, D;
reg Q;
always @(D or CLK)
if(CLK)Q<=D;
//当CLK=1时D被锁入Q
endmodule
4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比 较这两种方式。
else begin if (A==3'b000)Y=8'b11111110;
else if (A==3'b001)Y=8'b11111101;
else if (A==3'b010)Y=8'b11111011;
else if (A==3'b011)Y=8'b11110111;
else if (A==3'b100)Y=8'b11101111;
begin s <= G2 | G3 ; if (G1 == 0) Y <= 8'b1111_1111; else if (s) Y <= 8'b1111_1111; else case ( A ) 3'b000: Y = 8'b11111110; 3'b001: Y = 8'b11111101; 3'b010: Y = 8'b11111011; 3'b011: Y = 8'b11110111; 3'b100: Y = 8'b11101111; 3'b101: Y = 8'b11011111; 3'b110: Y = 8'b10111111; 3'b111: Y = 8'b01111111; default:Y = 8'bxxxxxxxx; endcase end
非阻塞式赋值的特点是必须在块语句执行结束时才整体完成赋值操作。非 阻塞的含义可以理解为在执行当前语句时,对于块中的其他语句的执行情况一 律不加限制,不加阻塞。这也可以理解为,在begin_end块中的所有赋值语句都 可以并行运行。
4-4 举例说明,为什么使用条件叙述不完整的条件句能导致产生时序模块的综合结果?
习题
4-3 阻塞赋值和非阻塞赋值有何区别? 答:Verilog中,用普通等号“=”作为阻塞式赋值语句的赋值符号,如y=b。
Verilog中,用普通等号“<=”作为非阻塞式赋值语句的赋值符号,如y<=b。 阻塞式赋值的特点是,一旦执行完当前的赋值语句,赋值目标变量y即刻
获得来自等号右侧表达式的计算值。如果在一个块语句中含有多条阻塞式赋值 语句,则当执行到其中某条赋值语句时,其他语句将禁止执行,即如同被阻塞 了一样。
第4章 Verilog HDL设计初步
习题
4-1 举例说明,Verilog HDL的操作符中,哪些操作符的运算结果总是一位的。 答: if_else条件语句
4-2 wire型变量与reg型变量有什么本质区别,它们可用于什么类型语句中? 答:书上P261~262《9.2 Verilog HDL数据类型》 reg主要是用于定义特定类型的变量,即寄存器型(Register)变量(或称寄存器型数据类的 变量)。如果没有在模块中显式地定义信号为网线型变量,Verilog综合器都会将其默认定 义为wire型。过程语句always@引导的顺序语句中规定必须是reg型变量。 wire型变量不允许有多个驱动源
答:● 当CLK发生了电平变化,但是从1变到0。这时无论D是否变化,都将启动
过程去执行if语句;但此时CLK=0,无法执行if语句,从而无法执行赋值语句
Q<=D,于是Q只能保持原值不变(这就意味着需要在设计模块中引入存储元件)。
● 当CLK没有发生任何变化,且CLK一直为0,而敏感信号D发生了变化。这
时也能启动过程,但由于CLK=0,无法执行if语句,从而也就无法执行赋值语句
Q<=D,导致Q只能保持原值(这也意味着需要在设计模块中引入存储元件)。
在以上两种情况中,由于if语句不满足条件,于是将跳过赋值表达式Q<=D,
不执行此赋值表达式而结束if语句和过程.对于这种语言现象,Velilog综合器解
wire [2:0] A ;
output [7:0] Y ;
reg [7:0] Y ;
reg s;
always @ ( A ,G1, G2, G3)
begin
s <= G2 | G3 ;
if (G1 == 0)
Y <= 8'b1111_1111;
else if (s)
Y <= 8'b1111_1111;
相关文档
最新文档