一周掌握FPGA Verilog HDL语法 day 7

2020-12-29 17:06:59 浏览数 (1)

大侠好,欢迎来到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等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

0 人点赞