发布时间 : 星期三 文章2015年EDA复习11更新完毕开始阅读
input ci; output[3:0] s; output co;
wire[3:0] carry;
function fa_s(input a,input b,input ci); fa_s = a ^ b ^ ci; endfunction
function fa_c(input a,input b,input ci); fa_c = a & b | a & ci | b & ci; endfunction
assign s[0] = fa_s(a[0],b[0],ci); assign carry[0] = fa_c(a[0],b[0],ci);
assign s[1] = fa_s(a[1],b[1],carry[0]); assign carry[1] = fa_c(a[1],b[1],carry[0]);
assign s[2] = fa_s(a[2],b[2],carry[1]); assign carry[2] = fa_c(a[2],b[2],carry[1]);
assign s[3] = fa_s(a[3],b[3],carry[2]); assign co = fa_c(a[3],b[3],carry[2]); endmodule
2.试用verilog语言产生如下图所示的测试信号
clkin1in2051015202530354045ns
module signal_gen9(clk,in1,in2); output in1,in2,clk; reg in1,in2,clk; initial begin
in1=0; in2=1; clk=0; end initial begin
#15 in1=1 #10 in1=0; #5 in1=1; #10 in1=0;
end initial begin
#5 in2=0; #5 in2=1; #25 in2=0; end always begin
#5 clk=~clk; end
endmodule
3.p131 例9.1 4. p131 例9.2
5、八路数据通道选择器 P147页
6、数据位宽可由用户定义的比较器的模块程序。(P146)
7.试用verilog语言,利用内置基本门级元件,采用结构描述方式生成如图所示的电路
D3D2D1D0S2S1T3T2T1T0Z
module MUX4x1(Z,D0,D1,D2,D3,S0,S1);
output Z;
inout D0,D1,D2,D3,S0,S1; and u0 (T0, D0, S0bar, S1bar) , u1(T1, D1, S0bar, S1), u2 (T2, D2, S0, S1bar), u3 (T3, D3, S0, S1) , not u4 (S0bar, S0), u5 (S1bar, S1);
or u6 (Z, T0, T1, T2, T3); endmodule
8、用Verilog语言设计一个输入数据位宽可由用户定义的有符号数的求补码程序,并编写测试代码。
求补码模块程序:
module Binary_complement(a,b); //二进制数补码 input [width-1:0] a; output [width-1:0] b; integer i;
reg [width-1:0]d; reg [width-2:0]c; parameter width=8; always @(a) begin
if(a[width-1]==1) begin
for(i=0;i< width-1;i=i+1)c[i]=!a[i];
d[width-1:0]={a[width-1],(c[width-2:0]+ width -1'd1)}; end
else d[width -1:0]=a[width-1:0];
end
assign b[width-1:0]=d[width-1:0]; endmodule
测试程序入如下: `timescale 1ns/1ns
`include \
module stimulus; //测试模块的名字 reg[7:0] a; wire[7:0]b;
Binary_complement mycount(a,b);//调用测试对象 initial
begin //激励信号定义 a=1; #10 a=2; #10 a=-8'd8; #10 a=127; #10 a=255; #10 $finish; end
//定义结果显示格式
initial $monitor($time,\endmodule
9. 试用verilog语言描述:图示为一个4位移位寄存器,是由四个D触发器(分别设为U1,U2,U3,U4)构成的。其中seri_in是这个移位寄存器的串行输入;clk为移位时脉冲输入;clr为清零控制信号输入;Q[1]~Q[3]则为移位寄存器的并行输出。