【FPGA算法加速】使用FPGA硬件编程编程语言Verilog编写HDL程序中向量的使用案例

1、向量

向量用于使用一个名称对相关信号进行分组,以便于操作。
例如,wire [7:0] w;声明一个名为w的 8 位向量,相当于有 8 条单独的连线。

向量的声明将维度放在向量名称之前,这与 C 语法相比是不寻常的。
但是部分选择在矢量名称之后具有您所期望 的尺寸。

wire [7:0] w;         // 8位线
reg  [4:1] x;         // 4位线
output reg [0:0] y;   // 输出端口y为向量
input wire [3:-2] z;  // 输入为6位向量允许负范围
output [3:0] a;       // 4位输出线。除非另有说明,否则类型为“wire”
wire [0:7] b;         // 8 位线,其中 b[0] 是最高有效位
wire [99:0] my_vector;      // 申明100个向量
assign out = my_vector[10];  // 输出部分向量成员

构建一个具有一个 3 位输入的电路,然后输出相同的向量,并将其拆分为三个单独的 1 位输出。将输出连接o0到输入向量的位置 o0、o1、o2位置。在图中,旁边带有数字的刻度线表示向量(或“总线”)的宽度,而不是为向量中的每个位绘制单独的线。
在这里插入图片描述

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 = vec;
    assign o2 = vec[2];
    assign o1 = vec[1];
    assign o0 = vec[0];

endmodule

2、向量反转

一个 32 位向量可以被视为包含 4 个字节(位 [31:24]、[23:16] 等)。构建一个将反转4 字节字 的字节顺序的电路。
AaaaaaaaBbbbbbbbCcccccccDdddddddd => DddddddCcccccccBbbbbbbbAaaaaaaaa
当需要交换一条数据 的字节顺序时,通常会使用此操作,例如在小端 x86 系统和许多 Internet 协议中使用的大端格式之间。

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

3、按位与逻辑运算符

使用向量时,两种运算符类型之间的区别变得很重要。两个 N 位向量之间的按位运算复制向量的每个位的运算并产生 N 位输出,而逻辑运算将整个向量视为布尔值(真 = 非零,假 = 零)和产生 1 位输出。
在这里插入图片描述

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] = a[2] || b[2];
    assign out_or_bitwise[1] = a[1] || b[1];
    assign out_or_bitwise[0] = a[0] || b[0];
    assign out_or_logical = a || b;
    assign out_not[2:0] = ~a;
    assign out_not[5:3] = ~b;

endmodule

时序图:
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值