大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
今天给大侠带来的是一周掌握FPGA Verilog HDL 语法,今天开启第七天,也就是最后一天。
最后两天推出思考题(附参考答案),大侠可以自行思考,检测一下自己这一周的语法学习效果,结合实例理解理论语法,会让你理解运用的更加透彻。下面咱们废话就不多说了,一起来看看吧。
思考题实例运用
14)在下题中循环执行完后,V的值是多少?
代码语言:javascript复制 reg [3:0] A;
reg V ,W;
integer K;
....
A=4'b1010;
for(K=2;K>=0;K=K-1)
begin
V=V^A[k];
W=A[K]^A[K 1];
end
参考答案:V的值是它进人循环体前值的取反。
(因为V的值与0,1,0 进行了异或,与1的异或改变了V的值。)
15)在下题中,给出了几种硬件实现,问以下的模块被综合后可能是哪一种?
always @(posedge Clock)
if(A)
C=B;
1.不能综合。
2.一个上升沿触发器和一个多路器。
3.一个输入是A,B,Clock的三输入与门。
4.一个透明锁存器。
5.一个带clock有始能引脚的上升沿触发器。
参考答案:2,5
16)在下题中,always状态将描述一个带异步Nreset和Nset输入端的上升沿触发器,则空括号内应填入什么,可从以下五种答案中选择。
代码语言:javascript复制 always @( )
if(!Nreset)
Q<=0;
else if(!Nset)
Q<=1;
else
Q<=D;
1.negedge Nset or posedge Clock
2.posedge Clock
3.negedge Nreset or posedge Clock
4.negedge Nreset or negedge Nset or posedge Clock
5.negedge Nreset or negedge Nset
参考答案:4
17)在下题中,给出了几种硬件实现,问以下的模块被综合后可能是哪一种?
1.带异步复位端的触发器。
2.不能综合或与预先设想的不一致。
3.组合逻辑。
4.带逻辑的透明锁存器。
5.带同步复位端的触发器。
(1)
代码语言:javascript复制 always @(posedge Clock)
begin
A<=B;
if(C)
A<=1'b0;
end
参考答案:5
(2)
代码语言:javascript复制 always @( A or B)
case(A)
1'b0: F=B;
1'b1: G=B;
endcase
参考答案:2
(3)
代码语言:javascript复制 always @( posedge A or posedge B )
if(A)
C<=1'b0;
else
C<=D;
参考答案:1
(4)
代码语言:javascript复制 always @(posedge Clk or negedge Rst)
if(Rst)
A<=1'b0;
else
A<=B;
参考答案:2(产生了异步逻辑)
18)在下题中,模块被综合后将产生几个触发器?
代码语言:javascript复制 always @(posedge Clk)
begin: Blk
reg B, C;
C = B;
D <= C;
B = A;
end
1. 2个寄存器 B 和 D
2. 2个寄存器 B和 C
3. 3个寄存器 B, C 和 D
4. 1个寄存器 D 5. 2个寄存器 C 和D
参考答案:2
19)在下题中,各条语句的顺序是错误的。请根据电路图调整好它们的次序。
参考答案:
代码语言:javascript复制 reg FF1,FF2,FF3;
always @(posedge Clock)
begin
Output= FF3;
FF3 = FF2;
FF2 = FF1;
FF1 = Input;
end
20)根据左表中SEL与OP的对应关系,在右边模块的空括号中填入相应的值。SEL:OP
参考答案:
casex(SEL)
3'bXX1: OP=3;
3'b0X0: OP=1;
3'b1X0: OP=0;
endcase
21)在以下表达式中选出正确的.
1) 4'b1010 & 4'b1101 = 1'b1
2) ~4'b1100 = 1'b1
3) !4'b1011 || !4'b0000 = 1'b1
4) & 4'b1101 = 1'b1
5) 1b'0 || 1b'1 = 1'b1
6) 4'b1011 && 4'b0100 = 4'b1111
7) 4'b0101<<1 =5'b01011
8) !4'b0010 is 1'b0
9) 4'b0001 || 4'b0000 = 1'b1
参考答案:3), 5), 8), 9)
22)在下一个模块旁的括号中填入display的正确值。
代码语言:javascript复制integerI;
reg[3:0]A;
reg[7:0]B;
initial
begin
I=-1;A=I;B=A;
$display("%b",B);( )
A=A/2;
$display("%b",A);( )
B=A 14
$diaplay("%d",B);( )
A=A 14;
$display("%d",A);( )
A=-2;I=A/2;
$display("%d",I);( )
end
参考答案:
代码语言:javascript复制I=-1;A=I;B=A;
$display("%b",B);(00001111)
A=A/2;
$display("%b",A);(0111)
B=A 14
$diaplay("%d",B);(21)
A=A 14;
$display("%d",A);(5)(A为4位,所以21被截为5)
A=-2;I=A/2;
$display("%d",I);(7)(A=-2,则是1110)
23)请问{1,0}与下面哪一个值相等。
1). 2'b01
2). 2'b10
3). 2'b00
4). 64'H000000000002
5). 64'H0000000100000000
参考答案:5 (位拼接运算符必须指明位数,若不指明则隐含着为32位的二进制数[即整数]。)
24)根据下题给出的程序,确定应将哪一个选项填入尖括号内。
1. defs.Reset
2."defs.v".Reset
3. M.Reset
4.Reset
1 参考答案:1 (模块间调用时,若引用其他模块定义的参数,要加上其他模块名,做为这个参数的前缀。)
代码语言:javascript复制module M
'include "defs.v"
....
if(OP==<defs.Reset>)
Bus=0;
endmodule
2. 标准答案:4
代码语言:javascript复制parameter Reset=8'b10100101; (File defs.v)
module M
'include "defs.v"
....
if(OP==<Reset>
Bus=0;
endmodule
25)如果调用Pipe时,想把Depth的值变为8,问程序中的空括号内应填入何值?
代码语言:javascript复制Module Pipe(IP,OP)
parameter Option=1;
parameter Depth=1;
...
endmodule
Pipe( ) P1(IP1,OP1);
参考答案:#(1,8) (其中1对应参数Option,8对应参数Depth.)
26)若想使P1中的Depth的值变为16,则应向空括号中填入哪个选项。
代码语言:javascript复制module Pipe (IP ,OP);
parameter Option =1;
parameter Depth = 1;
…………
endmodule
代码语言:javascript复制module
Pipe P1(IP1 ,OP1);
( );
endmodule
1.defparam P1.Depth=16;
2.parameter P1.Depth=16;
3.parameter Pipe.Depth=16;
4.defparam Pipe.Depth=16;
参考答案:1
(用后缀改变引用模块的参数要用defparam及用本模块名作为引用参数的前缀,如p1.Depth。)
27)如果我们想在Test的monitor语句中观察Count的值,则在空括号中应填入什么?
代码语言:javascript复制Module Test
Top T();
initial
$monitor( )
endmodule
代码语言:javascript复制module Top;
Block B1();
Block B2();
endmodule
代码语言:javascript复制module Block;
Counter C();
endmodule
代码语言:javascript复制module Counter;
reg [3:0] Count;
....
endmodule
答案:T.B1.C.Countor Test.T.B1.C.Count
28) 下题中用initial块给reg[7:0]V符值,请指明每种情况下V的8位都是什值。这道题说明在数的表示时,已标明字宽的数若用XZ表示某些位,只有在最左边的X或Z具有扩展性。
代码语言:javascript复制 Reg [ 7 :0 ] V
initial
begin
V = 8’b0;
V = 8’b1;
V = 8’bX;
V = 8’BZX;
V = 8’BXXZZ;
V = 8’b1X;
end
参考答案:
8’b00000000
8’b00000001
8’bXXXXXXXX
8’bZZZZZZZX
8’BXXXXXXZZ
8’b0000001X
最后一天 Day 7 到这里就结束了,也代表这一周学Verilog HDL 语法到这里就结束了,熟练透彻的使用语法也是做研发设计进阶的不可缺的部分,大侠可以自行思考练习,愿修炼的炉火纯青,大侠保重,告辞。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!