前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一周掌握FPGA Verilog HDL语法 day 7

一周掌握FPGA Verilog HDL语法 day 7

作者头像
FPGA技术江湖
发布2020-12-29 17:06:59
5500
发布2020-12-29 17:06:59
举报
文章被收录于专栏:FPGA技术江湖FPGA技术江湖

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA技术江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档