HDL Bits答案汇总(Vectors部分)

是基础理解以及个人 的练习答案,如有错欢迎大家指出。

第一题:Vector0:

Vector即向量,用于声明变量名称,以便电路设计操作。一般形式为:

wire [99:0] my_vector; // 声明一个包含100个元素的向量

assign out = my_vector[10]; // 选择向量中的一部分

该题只需要声明图中的变量即可。正确答案:

module top_module ( 
    input wire [2:0] vec,
    output wire [2:0] outv,
    output wire o2,
    output wire o1,
    output wire o0  ); // Module body starts after module declaration
    assign outv[2:0] =vec[2:0];
    assign o2 = vec[2];
    assign o1 = vec[1];
    assign o0 = vec[0];
endmodule

第二题:Vector1:

该题需要我们把in[15:0]分成上下两部分分给out_hi和out_lo;

正确答案:

`default_nettype none     // Disable implicit nets. Reduces some types of bugs.
module top_module( 
    input wire [15:0] in,
    output wire [7:0] out_hi,
    output wire [7:0] out_lo );
    assign out_hi[7:0] = in[15:8];
    assign out_lo[7:0] = in[7:0];
endmodule

vector的数据类型通常是wire或reg类型。如果要声明输入或输出端口,则类型还可以包括端口类型(例如,input或output)。

向量的第二个作用:可用名称来分组相关的信号,使其更便于操作。例如,wire [7:0] w;声明一个名为w的8位向量,相当于有8条独立的线。

Tips:在verilog语言中,我们需要用到特定的端序声明向量,比如a[3:0]。当我们使用[3:0]来声明这个向量的端序时,就不要使用其他任何端序来表示这个向量,如[0:3]\[7:5]...我们必须严格按照开始设定的端序去写,这样就能保证你的代码不会出现奇怪的bug。

这里还有很多关于向量的笔记和可注意的点,不一一总结,大家可以打开有道翻译,认真理解是可以掌握的。

第三题:Vector2:

本题要求是需要反转一个32字节的向量,注释也提示可直接使用assign语句声明,并且看题意也不需要完全翻转,所以我们可直接逐段表示:

正确答案:

module top_module( 
    input [31:0] in,
    output [31:0] out );//
    assign out[31:24] = in[7:0];
    assign out[23:16] = in[15:8];
    assign out[15:8] = in[23:16];
    assign out[7:0] = in[31:24];
    // assign out[31:24] = ...;

endmodule

第四题:Vectorgates:

构建一个具有两个3位输入的电路,用于计算两个向量的位或、两个向量的逻辑或和两个向量的逆(NOT)。将b的倒数放在out_not的上半部分(即bits[5:3]),将a的倒数放在下半部分。

位或:|

逻辑或:||

逆:~

正确答案:

module top_module( 
    input [2:0] a,
    input [2:0] b,
    output [2:0] out_or_bitwise,
    output out_or_logical,
    output [5:0] out_not
);
    assign out_or_bitwise[2:0] = a[2:0]|b[2:0];
    assign out_or_logical = a||b;
    assign out_not[2:0] = ~a[2:0];
    assign out_not[5:3] = ~b[2:0];
    

endmodule

第五题:gatess4:

该题要求为:建立一个有四输入的电路,有三个输出:

out_and: 4输入与门的输出。

out_or:四输入或门输出。

out_xor:四输入异或门输出。

Tips:与逻辑:&

位或:|

异或:^

正确答案:

module top_module( 
    input [3:0] in,
    output out_and,
    output out_or,
    output out_xor
);
    assign out_and = in[0]&in[1]&in[2]&in[3];
    assign out_or  = in[0]|in[1]|in[2]|in[3];
    assign out_xor = in[0]^in[1]^in[2]^in[3];
endmodule

第六题:Vector3:

本题意在让我们使用一些位数(a,b,c,d,e,f,11)代入w,x,y,z中去,前面的说明是让我们更好理解、教我们使用相关语法来完成这些题目的,大家可以自行打开翻译进行理解:

正确答案

module top_module (
    input [4:0] a, b, c, d, e, f,
    output [7:0] w, x, y, z );//

    // assign { ... } = { ... };
    assign {w,x,y,z} = {a,b,c,d,e,f,2'b11};
endmodule

第七题:Vectorr:

给定一个8位输入向量[7:0],反转它的位顺序。

需要了解到一些逻辑思路,我们可以单纯地将每一位数反转地使用assign表示出来,但未免有些太繁琐:

直接表示:

module top_module( 
    input [7:0] in,
    output [7:0] out
);
    assign out[7:0] = {in[0],in[1],in[2],in[3],in[4],in[5],in[6],in[7],};
endmodule

使用逻辑语言:很好理解

module top_module( 
    input [7:0] in,
    output [7:0] out
);
    integer i;
    always@(*)begin
        for(i=0;i<8;i=i+1)begin
            out[i]=in[7-i];
        end
    end
endmodule

第八题:Vector4:

使用复制操作符将向量连接在一起。题目有提及相关语法。

本题要求为:

建立一个电路,将8位数字的符号扩展到32位。这需要将符号位复制24次(即复制bit[7] 24次),然后是8位数字本身。

正确答案:

module top_module (
    input [7:0] in,
    output [31:0] out );//

    // assign out = { replicate-sign-bit , the-input };
    assign out[31:0]={{24{in[7]}},in};
endmodule

第九题:Vector5:

表示上部分和下部分的24位值,如果上下两位相等,那么输出为1。使用异或逻辑将comparism完成:

正确答案:

module top_module (
    input a, b, c, d, e,
    output [24:0] out );//

    // The output is XNOR of two vectors created by 
    // concatenating and replicating the five inputs.
    // assign out = ~{ ... } ^ { ... };
    wire [24:0]out1;
    wire [24:0]out2;
    
    assign out1 = {5{a,b,c,d,e}};
    assign out2 = {{5{a}},{5{b}},{5{c}},{5{d}},{5{e}}};
    assign out = ~(out1^out2);
endmodule

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值