
今天给大侠带来的是一周掌握FPGA Verilog HDL 语法,今天开启第七天,也就是最后一天。
最后两天推出思考题(附参考答案),大侠可以自行思考,检测一下自己这一周的语法学习效果,结合实例理解理论语法,会让你理解运用的更加透彻。下面咱们废话就不多说了,一起来看看吧。
思考题实例运用
14)在下题中循环执行完后,V的值是多少?
    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输入端的上升沿触发器,则空括号内应填入什么,可从以下五种答案中选择。
    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)
    always @(posedge Clock) 
        begin 
            A<=B; 
            if(C) 
                A<=1'b0; 
        end参考答案:5
(2)
    always @( A or B) 
        case(A) 
            1'b0: F=B; 
            1'b1: G=B; 
        endcase参考答案:2
(3)
    always @( posedge A or posedge B ) 
        if(A) 
            C<=1'b0; 
        else 
            C<=D;参考答案:1
(4)
    always @(posedge Clk or negedge Rst) 
        if(Rst) 
             A<=1'b0; 
        else 
             A<=B;参考答案:2(产生了异步逻辑)
18)在下题中,模块被综合后将产生几个触发器?
    always @(posedge Clk) 
        begin: Blk
            reg B, C; 
            C = B; 
            D <= C; 
            B = A; 
        end1. 2个寄存器 B 和 D
2. 2个寄存器 B和 C
3. 3个寄存器 B, C 和 D
4. 1个寄存器 D 5. 2个寄存器 C 和D
参考答案:2
19)在下题中,各条语句的顺序是错误的。请根据电路图调整好它们的次序。

参考答案:
    reg FF1,FF2,FF3; 
    
    always @(posedge Clock) 
        begin 
            Output= FF3; 
            FF3 = FF2; 
            FF2 = FF1; 
            FF1 = Input; 
        end20)根据左表中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的正确值。
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参考答案:
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 (模块间调用时,若引用其他模块定义的参数,要加上其他模块名,做为这个参数的前缀。)
module M 
    'include "defs.v" 
    .... 
    if(OP==<defs.Reset>) 
    Bus=0; 
endmodule2. 标准答案:4
parameter Reset=8'b10100101; (File defs.v) 
module M 
'include "defs.v" 
.... 
if(OP==<Reset>
Bus=0; 
endmodule25)如果调用Pipe时,想把Depth的值变为8,问程序中的空括号内应填入何值?
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,则应向空括号中填入哪个选项。
module Pipe (IP ,OP); 
      parameter Option =1; 
      parameter Depth = 1; 
      …………
endmodule module 
      Pipe P1(IP1 ,OP1); 
      ( ); 
endmodule1.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的值,则在空括号中应填入什么?
Module Test 
    Top T(); 
    initial 
    $monitor( ) 
endmodule module Top; 
    Block B1(); 
    Block B2(); 
endmodule module Block; 
    Counter C(); 
endmodulemodule 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具有扩展性。
    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 语法到这里就结束了,熟练透彻的使用语法也是做研发设计进阶的不可缺的部分,大侠可以自行思考练习,愿修炼的炉火纯青,大侠保重,告辞。