一周掌握FPGA Verilog HDL语法 day 7

一周掌握FPGA Verilog HDL语法 day 7

今天给大侠带来的是一周掌握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;

 

(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; 
        end

 

  1. 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;

 
    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的正确值。

 

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; 
endmodule

 

  1. 标准答案:4

 

parameter Reset=8'b10100101; (File defs.v) 
module M 
'include "defs.v" 
.... 
if(OP==<Reset>
Bus=0; 
endmodule

 

25)如果调用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); 
      ( ); 
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的值,则在空括号中应填入什么?

 

Module Test 
    Top T(); 
    initial 
    $monitor( ) 
endmodule 

 

module Top; 
    Block B1(); 
    Block B2(); 
endmodule 

module Block; 
    Counter C(); 
endmodule

module Counter; 
    reg [3:0] Count; 
    .... 
endmodule

答案:T.B1.C.Countor Test.T.B1.C.Count

  1. 下题中用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 语法到这里就结束了,熟练透彻的使用语法也是做研发设计进阶的不可缺的部分,大侠可以自行思考练习,愿修炼的炉火纯青,大侠保重,告辞。

 

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有。

 

【微信交流群】

现微信交流群已建立08群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

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

已标记关键词 清除标记
相关推荐
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值