第4章 Verilog HDL设计初步习题

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图4-26 含2选1多路选择器的模块 选 多路选择器的模块
习 题
给出1位全减器的VHDL描述。要求: VHDL描述 4-7 给出1位全减器的VHDL描述。要求: 首先设计1位半减器,然后用例化语句将它们连接起来, 28中 (1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-28中h_suber 是半减器,diff是输出差 s_out是借位输出 sub_in是借位输入 是输出差, 是借位输出, 是借位输入。 是半减器,diff是输出差,s_out是借位输出,sub_in是借位输入。 根据图4 27设计 位全减器。 设计1 (2)根据图4-27设计1位全减器。 位全减器为基本硬件,构成串行借位的8位减法器, (3)以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来 完成此项设计。 完成此项设计。
module MUXK (a1, a2, a3, s0, s1, outy); input a1, a2, a3, s0, s1; output outy; wire outy; wire tmp; mux21a u1 (.a(a2),.b(a3),.s(s0),.y(tmp)); mux21a u2 (.a (a1),.b (tmp),.s(s1),.y(outy)); endmodule
4-4 举例说明,为什么使用条件叙述不完整的条件句能导致产生时序模块的综合结果? 举例说明,为什么使用条件叙述不完整的条件句能导致产生时序模块的综合结果? 答:● 当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综合器解 释为,对于不满足条件,跳过赋值语句Q<=D不予执行,即意味着保持Q的原值 不变(保持前一次满足if条件时Q被更新的值)。对于数字电路来说,当输入改变后 试图保持一个值不变,就意味着使用具有存储功能的元件,就是必须引进时序元 件来保存Q中的原值,直到满足if语句的判断条件后才能更新Q中的值,于是便产 生了时序元件。 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-27
1位全减器 位全减器
习 题
//一个二进制半减器 半减器设计进行了阐述 半减器 x y 0 0 1 1 0 0 1 1 sub_in diffr sub_out 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 1 0 0 0 1
module h_suber(x,y,diff,s_out); input x,y; output diff, s_out; assign diff=x^y; assign s_out=(~x)&y; endmodule x 0 0 1 1 y 0 1 0 1 diff 0 1 1 0 s_out 0 1 0 0
initial begin //测试文件,??部分请根据被测试的文件修改 //测试文件,??部分请根据被测试的文件修改 测试文件 module stimulus; reg [2:0]A ; wire[7:0]Y ; reg G1 ,G2 ,G3; decoder3_8 DUT ( G1 ,Y ,G2 ,A ,G3 ); initial begin $monitor($time,"A=%d,G1=%b,G2=%b, G3=%b,Y= %d\n",A, G1, G2, G3, Y); end G1=1 ;G2=1 ;G3=1;A=0; #10 G2=0;G1=0; #10 G2=0;G1=1; #10 G2=1;G1=0;G3=0; #10 G1=0;G1=1;G3=1; #10 G1=0;G1=0;G3=0; #10 G1=1;G2=0;G3=0; #50 A= 0; #50 A= 1; #50 A= 2; #50 A= 3; #50 A= 4; #50 A= 5; #50 A= 6; #50 A= 7; #50 $finish; end endmodule
4-5 用Verilog设计一个 译码器,要求分别用 设计一个3-8译码器 语句和if_else语句。比 语句。 设计一个 译码器,要求分别用case语句和 语句和 语句 较这两种方式。 较这两种方式。
4-5 用Verilog设计一个 译码器,要求分别用 设计一个3-8译码器 语句和if_else语句。比较这两 语句。 设计一个 译码器,要求分别用case语句和 语句和 语句 种方式。 种方式。
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) 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 endmodule
第4章 章 Verilog HDL设计初步 设计初步
习 题
4-1 举例说明,Verilog HDL的操作符中,哪些操作符的运算结果总是一位的。 举例说明, 的操作符中, 的操作符中 哪些操作符的运算结果总是一位的。 答: if_else条件语句 条件语句
4-2 wire型变量与 型变量与reg型变量有什么本质区别,它们可用于什么类型语句中? 型变量有什么本质区别, 型变量与 型变量有什么本质区别 它们可用于什么类型语句中? 书上P261~262《9.2 Verilog HDL数据类型》 数据类型》 答:书上 《 数据类型 reg主要是用于定义特定类型的变量,即寄存器型 主要是用于定义特定类型的变量, 变量(或称寄存器型数据类的 主要是用于定义特定类型的变量 即寄存器型(Register)变量 或称寄存器型数据类的 变量 变量)。如果没有在模块中显式地定义信号为网线型变量,Verilog综合器都会将其默认定 变量 。如果没有在模块中显式地定义信号为网线型变量, 综合器都会将其默认定 义为wire型。过程语句 引导的顺序语句中规定必须是reg型变量。 型变量。 义为 型 过程语句always@引导的顺序语句中规定必须是 引导的顺序语句中规定必须是 型变量 wire型变量不允许有多个驱动源 型变量不允许有多个驱动源
x为被减数, 为被减数, 为减数, y为减数, sub_in为 sub_in为 低位的借 位, diff 为差, r为差,su b_out为向 b_out为向 高位的借 位。
0 0 0 0 1 1 1 1
module f_suber(x,y,sub_in,diffr,sub_out); //一个二进制全减器 全减器顶层设计进行了阐述 全减器 output diffr,sub_out; input x,y,sub_in; wire e,d,f; h_suber u1(x,y,e,d); // h_suber u2(.x(e),.diff(diffr),.y(sub_in),.s_out(f));// or2a u3(.a(d),.b(f),.c(sub_out)); endmodule
习 题
阻塞赋值和非阻塞赋值有何区别? 4-3 阻塞赋值和非阻塞赋值有何区别? Verilog中 用普通等号“=”作为阻塞式赋值语句的赋值符号 作为阻塞式赋值语句的赋值符号, y=b。 答:Verilog中,用普通等号“=”作为阻塞式赋值语句的赋值符号,如y=b。 Verilog中 用普通等号“<=”作为非阻塞式赋值语句的赋值符号 作为非阻塞式赋值语句的赋值符号, y<=b。 Verilog中,用普通等号“<=”作为非阻塞式赋值语句的赋值符号,如y<=b。 阻塞式赋值的特点是,一旦执行完当前的赋值语句,赋值目标变量y 阻塞式赋值的特点是,一旦执行完当前的赋值语句,赋值目标变量y即刻 获得来自等号右侧表达式的计算值。 获得来自等号右侧表达式的计算值。如果在一个块语句中含有多条阻塞式赋值 语句,则当执行到其中某条赋值语句时,其他语句将禁止执行, 语句,则当执行到其中某条赋值语句时,其他语句将禁止执行,即如同被阻塞 了一样。 了一样。 非阻塞式赋值的特点是必须在块语句执行结束时才整体完成赋值操作。 非阻塞式赋值的特点是必须在块语句执行结束时才整体完成赋值操作。非 阻塞的含义可以理解为在执行当前语句时, 阻塞的含义可以理解为在执行当前语句时,对于块中的其他语句的执行情况一 律不加限制,不加阻塞。这也可以理解为, begin_end块中的所有赋值语句都 律不加限制,不加阻塞。这也可以理解为,在begin_end块中的所有赋值语句都 可以并行运行。 可以并行运行。
Байду номын сангаас
习 题
4-6 图4-26所示的是双 选1多路选择器构成的电路 所示的是双2选 多路选择器构成的电路 多路选择器构成的电路MUXK。对于其中 所示的是双 。对于其中MUX21A,当s=0 , 和s=1时,分别有 时 分别有y=a和y=b。试在一个模块结构中用两个过程来表达此电路。 和 。试在一个模块结构中用两个过程来表达此电路。 参考实验1 答:参考实验
4-5 用Verilog设计一个 译码器,要求分别用 设计一个3-8译码器 语句和if_else语句。比较这两 语句。 设计一个 译码器,要求分别用case语句和 语句和 语句 种方式。 种方式。 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) begin s <= G2 | G3 ; if (G1 == 0) Y <= 8'b1111_1111; else if (s) Y <= 8'b1111_1111; 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; 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 end endmodule Y=8'bxxxxxxxx;end
相关文档
最新文档