第6章_Verilog_HDL设计进阶习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
begin a=0;
for(i=0;i<=7;i=i+1) //for 语句 if(Q[i]) a=a+1; else a=a;
end endmodule
parameter S=4; output[3:0]a; input[7:0] Q; reg[3:0] a; reg[2*S:1]TQ; integer i; always @(Q) begin TQ=Q; sum=0;
begin sum=0;
for(i=0;i<=6;i=i+1) //for 语句 if(t[i]) sum=sum+1;
if(sum[2]) f=1; //若超过4 人赞成,则pass=1 else f=0; end endmodule
习题
6-5 Verilog设计一个4位4输入最大数值检测电路。
习题
6-6 从不完整的条件语句产生时序模块的原理看,例6-9和例6-10从表面上看都包含 不完整条件语句,试说明,为什么例6-9的综合结果含锁存器,二例6-10却没有。
答:参见书P137
【例6-9】非阻塞赋初值导致错误
【例6-10】阻塞赋初值正确
module mux4_1(D0,D1,D2,D3,S1,S0,OUT); module mux4_1(DO,D1, D2,D3,S1, SO, OUT);
//Verilog设计一个4位4输入最大数值检测电路 module cnt55(max,a,b,c,d);//4位4输入最大数值检测电路 output [3:0] max; input [3:0] a,b,c,d; wire[3:0]sum1,sum2,sum3; assign sum1=(a>b)?a:b; assign sum2=(c>d)?c:d; assign max=(sum1>sum2)?sum1:sum2; endmodule
output OUT ;
Baidu Nhomakorabea
output OUT ;
input D0,D1, D2,D3,S1, SO;
input DO,D1, D2,D3,S1, SO;
reg [2:0] T ; reg OUT;
reg [2:0] T ; reg OUT;
always @(D0, D1,D2,D3, S1,S0)
always @(D0, D1,D2,D3, S1,S0)
repeat(2*S) begin if(TQ[1])a=a+1;
TQ=TQ>>1; end
end
endmodule
6-3 用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制
数中含1的数量。
while循环语句
module Statistics8(sum,A); parameter S=8; output[3:0]sum; input[7:0] A; reg[S:1] AT; reg[3:0] sum; reg[S:0] CT; always @(A) begin AT={{S{1'b0}},A}; sum=0; CT=S;
else if(EN) Q<=D;
//在CLK上升沿处,EN=1,则执行赋值语句
end
//块结束
习题
6-3 用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的
数量。
for循环语句
repeat循环语句
module cnt53(a,Q);
module cnt53(a,Q); output[3:0]a; input[7:0] Q; reg[3:0] a; integer i; always @(Q)
描述。
答:异步复位必须将复位信号放在敏感信号表中。
同步清零:
always @(posedge CLK) //CLK上升沿启动
Q<=D;
//当CLK有升沿时D被锁入Q
异步清零:
always @(posedge CLK or negedge RST) begin //块开始
if(!RST)Q<=0; //如果RST=0条件成立,Q被清0
begin T <= 0;
begin T = 0;
if (SO==1) T <= T+1
if (SO==1) T = T+1
if (S1==1) T <= T+2 ;
if (S1==1) T = T+2 ;
case (T)
case (T)
0 : OUT = D0;
0 : OUT = D0;
1 : OUT = D1;
while(CT>0) begin
if(AT[1])sum=sum+1;else sum=sum; begin CT= CT-1; AT=AT>>1; end end end endmodule
习题
6-4 用循环语句设计一个7人投票表决器。
module cnt54(f,t); output f; input[6:0] t; reg[2:0] sum; integer i; reg f; always @(t)
1 : OUT= D1;
2 : OUT = D2 ;
2 : OUT =D2 ;
3 : OUT= D3;
3 : OUT= D3;
default : OUT D0;
default : OUT D0;
endcase end
endcase end
endmodule
endmodule
习题
6-6 从不完整的条件语句产生时序模块的原理看,例6-9和例6-10从表面上看都包含 不完整条件语句,试说明,为什么例6-9的综合结果含锁存器,二例6-10却没有。
第6章
Verilog HDL设计进阶
习题 实验与设计
习题
6-1 在Verilog设计中,给时序电路清零(复位)有两种不同方法,它们是什么,如 何实现? 答:同步清零、异步清零,在过程语句敏感信号表中的逻辑表述posedge CLK用于指明 正向跳变,或negedge用于指明负向跳变实现
6-2 哪一种复位方法必须将复位信号放在敏感信号表中?给出这两种电路的Verilog
答:参见书P137
事实上,例6-9中,T在过程中出现了3次非阻塞赋值操作,即有3个赋值源对 同一信号T进行赋值--T<=0、T<=T+1和T<=T+2。但根据以上的讨论,对于非阻塞 式赋值,前两个语句中的赋值目标信号T都不可能得到任何数值,只有最后的 T<=T+2语句中的T的值能得到更新。然而,由于赋值符号右边的T始终未得到任何 确定的初始值,即语句T<=0并未完成赋值,所以最后的T始终是个未知值。结果 只能被综合成随S1和S0随机变动的时序电路,导致T成为一个不确定的信号。结 果在过程最后的case语句中,无法通过判断T的值来确定选通输入,即对OUT的赋 值。
相关文档
最新文档