第三章练习题
1.题目:用循环语句设计一个逻辑电路模块,用以统计一个8位二进制数(8bit并行输入)中含1的数量
module for_cnt_1(a,b);
input [8:1] a;//定义输入8位二进制数
output [4:1] b;//定义求和输出变量,因最多8个1相加,故要求四位位宽
reg [8:1] c;//输入信号的中间变量
reg [4:1] b,r;//求和中间变量
integer i;//for循环变量
always @(a)//敏感信号a,当a发生变化,进入模块
begin
c=a;
r=0;
for(i=1;i<=8;i=i+1)
begin
if(c[1])//判断最低位为1则求和
r=r+1;
c=c>>1;//右移一位
end
b=r
end
endmodule
2.题目:给出1位全减器的Verilog描述;最终实现8位全减器。
要求:首先设计1位半减器,然后用例化语句将其连接起来构成1位全减器
(1)1位半减器
真值表
x | y | diff=\(\mid\) x-y\(\mid\)(差值输出) | s_out=1,x<y(借位输出) |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
assign语句实现
module s_diff(x,y,diff,sout);
input x,y;
output diff,sout;
assign diff=x^y;//异或操作
assign sout=(~x)&y;
endmodule
case语句实现
module s_diff(x,y,diff,sout);
input x,y;
output diff,sout;
reg diff,sout;
always@(x,y)
case({x,y})//并位操作,下抄真值表
2'b00: diff=0,sout=0;end
2'b01: diff=1,sout=1;end
2'b10: diff=1,sout=0;end
2'b11: diff=0,sout=0;end
endcase
endmodule
(2)1位全减器(由两个1位半减器级联构成)
module f_suber(xin,yin,sub_in,sub_out,diff);
input xin,yin,sub_in;
output diff_out,sub_out;
wire a,b,c;
h_suber u1(.x(xin),.y(yin),.diff(a),.s_out(b));//
h_suber u2(.x(a),.y(sub_in),.diff(diff_out),.s_out(c));
assign sub_out =c|b;
endmodule
(3)8位串行全减器(由8个1位全减器级联构成)
module suber_8(x,y,sin,diff,sout);
input [7:0] x;
input [7:0] y;
input sin;
output [7:0] diff;
output sout;
wire [6:0] a;
f_suber u0(.xin(x[0]),.yin(y[0]),.diff_out(diff[0]),.sub_in(sin),.sub_out(a[0]),);
f_suber u1(.xin(x[1]),.yin(y[1]),.diff_out(diff[1]),.sub_in(a[0]),.sub_out(a[1]),);
f_suber u2(.xin(x[2]),.yin(y[2]),.diff_out(diff[2]),.sub_in(a[1]),.sub_out(a[2]),);
f_suber u3(.xin(x[3]),.yin(y[3]),.diff_out(diff[3]),.sub_in(a[2]),.sub_out(a[3]),);
f_suber u4(.xin(x[4]),.yin(y[4]),.diff_out(diff[4]),.sub_in(a[3]),.sub_out(a[4]),);
f_suber u5(.xin(x[5]),.yin(y[5]),.diff_out(diff[5]),.sub_in(a[4]),.sub_out(a[5]),);
f_suber u6(.xin(x[6]),.yin(y[6]),.diff_out(diff[6]),.sub_in(a[5]),.sub_out(a[6]),);
f_suber u7(.xin(x[7]),.yin(y[7]),.diff_out(diff[7]),.sub_in(a[6]),.sub_out(a[7]),);
endmodule
//每一位x,y输入一位全减器,构成并联输入,借位从第一位传递到第八位构成串联结构,输出为八位diff差值
本文来自博客园,作者:JsDakey,转载请注明原文链接:https://www.cnblogs.com/helloszy/p/16353421.html