Verilog语言学习提纲
1、一个复杂数字电路的完整VerilogHDL模型,是由什么构成的?
(可选项:(1) 变量(2) 寄存器(3) 门电路(4) 模块module)
2、Verilog语言规定的4种基本逻辑值是什么?
3、在Verilog程序中,如果没有说明输入、输出变量的数据类型,它们的数据类型是什么?
4、Verilog语言中逻辑运算符“&&”与位运算符“&”有什么不同?
5、什么是Verilog语言中的拼接运算和缩位运算:
(1)下列运算的二进制值是多少?
reg [3:0] m;
m = 4’b1010; //{2{m}}的二进制值是。
(2)假设m=4’b0101,按照要求填写下列运算的结果:
&m = , |m= ,
^m = , ^m= 。
6、根据下面的V erilog描述,画出数字电路的逻辑图,写出逻辑电路的输出表达式。
moudule Circuit_A(input A,B, output Y1,Y2);
assign Y1=A&B;
or (Y2,A,B);
endmodule
7、使用连续赋值语句,写出由下列逻辑函数定义的逻辑电路的Verilog 描述。
(1) L 1=(B+C)(A _+D)B _
(2) L 2=(B _C+ABC+BC _)(A+D _
)
(3) L 3=C(AD+B)+A _
B
8、图1所示的是一个码制变换器,将输入的格雷码转换成二进制码输出。试用Verilog 描述它的功能,然后用Vivado 软件进行逻辑功能仿真,并给出仿真波形。
图1
9、说明下列Verilog 程序所描述电路的逻辑功能。
(1)module Circuit_A(
input [1:0] A, B,
input S, E,
output [1:0] Y
)
;
assign Y = E? (S? A:B): ’bz ; endmodule
(2)module Circuit_B
#(parameter N=8)
(
input [N-1:0] in0,in1,
output reg gt,eq,lt
);
always@*
begin
gt=0;
eq=0;
lt=0;
if (in0>in1)
gt=1;
if (in0==in1)
eq=1;
if (in0<in1)
lt=1;
end
endmodule
10、下面是用分层次方法设计的4位串行全加器程序。设计者首先完成了1位全加器(模块名为_1bitAdder)的建模和仿真,结果是正确的;然后再顶层调用4个1位全加器模块组合成为4位全加器(模块名为_4bitAdder),结果编译未能通过,试参照图2所示组成框图分析下列程序中存在的错误,并进行改正。
module_4bitAdder (A, B, Cin, Sum, Cout);
input [3:0] A, B;
input Cin;
output [3:0] Sum;
output Cout;
reg Cout;
reg [4:0] temp;
always @ (A or B or Cin)
begin
temp[0] = Cin;
_1bitAdder u0 (A[0], B[0], temp[0], Sum[0], temp[1]);
_1bitAdder u1 (A[1], B[1], temp[1], Sum[1], temp[2]);
_1bitAdder u2 (A[2], B[2], temp[2], Sum[2], temp[3]);
_1bitAdder u3 (A[3], B[3], temp[3], Sum[3], temp[4]);
Cout = temp[4];
end
endmodule
module_1bitAdder (A, B, Ci, Sum, Co); //此模块正确
input A, B, Ci;
output Sum, Co;
assign Sum = A^B^Ci;
assign Co = (A&B) | (B&Ci) | (A&Ci);
endmodule
图2四位串行进位全加器