今天给大侠带来的是一周掌握FPGA Verilog HDL 语法,今天开启第六天。
上一篇提到了编译预处理(宏定义 `define、“文件包含”处理`include、时间尺度 `timescale、条件编译命令`ifdef、`else、`endif),经过五天的Verilog HDL基础语法的学习,基本语法差不多都在这里了,最后两天推出思考题(附参考答案),大侠可以自行思考,检测一下自己这一周的语法学习效果,结合实例理解理论语法,会让你理解运用的更加透彻。下面咱们废话就不多说了,一起来看看吧。
module AOI(A,B,C,D,F);
input A,B,C,D;
output F;
assign F = ((A&B)&(C&D));
endmodule
moduleTop...
FullAdderFA( .Sum(W1), //W1
.Cout(W2),//W2
.Cin(W3), //W3
.A(W4), //W4
.B(W5)); //W5
endmodule
module TestFixture;
reg A,B,SEL;
wire F;
MUX2M(SEL,A,B,F);
initial
begin
SEL=0; A=0; B=0;
#10 A=1;
#10 SEL=1; #10 B=1;
end
initial
$monitor(SEL,A,B,,F);
endmodule
reg [7:0] A;
reg [2:0] Sum, Op1, Op2;
reg P, OneBit;
initial
begin
Sum=Op1+Op2;
P=1;
A[ ?]=Sum;
.....
end
module FADD(A,B,Cin,Sum,Cout);
input A, B, Cin;
output Sum, Cout;
....
endmodule
module Test;
...
FADDM(C1,C2,C3,C4,C5);
...
endmodule
参考答案: Cin(wire) Cout(wire/reg) C3(wire/reg) C5(wire)
10〕在下一个程序段中,当ADDRESS的值等于5'b0X000时,问casex执行完后A和B的值是多少。
A=0;
B=0;
casex(ADDRESS)
5'b00???: A=1;
5'b01???: B=1;
5'b10?00,5'b11?00:
begin
A=1;
B=1;
end
endcase
参考答案: A=1 and B=0;
11)在下题中,事件A分别在10,20,30发生,而B一直保持X状态,问在50时Count的值是多少。
reg [7:0] Count;
initial
Count=0;
always
begin
end
参考答案:Count=1;
(这是因为当A第一次发生时,Count的值由0变为1,然后事件控制 @(B) 阻挡了进程。)
12)在下题中initial块执行完后I,J,A,B的值会是多少。
reg [2:0] A;
reg [3:0] B;
integer I, J;
initial
begin
I=0;
A=0;
I=I-1;
J=I;
A=A-1;
B=A;
J=J+1;
B=B+1;
end
参考答案:
I=-1 (整数可为负数)
J=0
A=7 (A为reg型为非负数,又因为A为3位即为111)
B=8 (在B=A时,B=0111,然后B=B+1,所以B=4’b1000)
13)在下题中,当V的值发生变化且为-1时,执行完always块后 Count的值应是多少?
reg[7:0]V;
reg[2:0]Count;
always @(V)
begin
Count=0;
while(~V[Count])
Count=Count+1;
end
参考答案:Count=0;
Day 6 就到这里,最后一天Day 7 继续推出思考题(附参考答案),大侠可以自行思考,检测一下自己这一周的语法学习效果,大侠保重,告辞。
END
往期精选
FPGA技术江湖广发江湖帖
无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。
FPGA技术江湖微信交流群
加群主微信,备注姓名+学校/公司+专业/岗位进群
FPGA技术江湖QQ交流群
备注姓名+学校/公司+专业/岗位进群