HDLBits练习汇总-02-Verilog语言--向量部分(二)

简介: HDLBits练习汇总-02-Verilog语言--向量部分

Vector3(部分选择)


使用部分选择来选择向量的部分。串联运算符{a,b,c}用于通过将向量的较小部分串联在一起来创建更大的向量。

{3'b111,3'b000} => 6'b111000
{1'b1,1'b0,3'b101} => 5'b10101
{4'ha,4'd10} => 8'b10101010 // 4'ha和4'd10均为二进制的4'b1010

串联需要知道每个分量的宽度(或者您怎么知道结果的长度?)。因此,{1、2、3}是非法的,并导致出现错误消息:串联中不允许使用不定尺寸的常量。

可以在分配的左侧和右侧使用串联运算符。

input [15:0] in;
output [23:0] out;
assign {out[7:0], out[15:8]} = in;         // Swap two bytes. Right side and left side are both 16-bit vectors.
assign out[15:0] = {in[7:0], in[15:8]};    // This is the same thing.
assign out = {in[7:0], in[15:8]};       // This is different. The 16-bit vector on the right is extended to
                                        // match the 24-bit vector on the left, so out[23:16] are zero.
                                        // In the first two examples, out[23:16] are not assigned

A Bit of Practice


给定几个输入向量,将它们连接在一起,然后将它们分成几个输出向量。有六个5位输入向量:a,b,c,d,e和f,总共有30位输入。有四个8位输出向量:w,x,y和z,用于32位输出。输出应该是输入向量的串联,后跟两个1位:

image.png

module top_module (
    input [4:0] a, b, c, d, e, f,
    output [7:0] w, x, y, z );//
    assign {w,x,y,z} = { a, b, c, d, e, f,2'b11};
endmodule

矢量反转


给定8位输入向量[7:0],请反转其位顺序。

tips:

分配out [7:0] = in [0:7]; 由于Verilog不允许翻转向量位顺序,因此无法正常工作。

串联运算符可以节省一些编码,允许使用1个assign语句而不是8个。

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

复制运算符


所述并置(或者复制)运算符允许矢量串联起来以形成更大的载体。但是有时候您想将同一事物连接在一起很多次,而做类似分配a = {b,b,b,b,b,b,b}的事情仍然很乏味;。复制运算符允许重复一个向量并将它们串联在一起:

{num {vector}}

这种复制载体由NUM倍。num必须为常数。两组嵌套都是必需的。

Examples:

{5{1'b1}}           // 5'b11111 (or 5'd31 or 5'h1f)
{2{a,b,c}}          // The same as {a,b,c,a,b,c}
{3'd5, {2{3'd6}}}   // 9'b101_110_110. It's a concatenation of 101 with
                    // the second vector, which is two copies of 3'b110.

一个复制运算符的常见用法是将一个较小的数字符号扩展为一个较大的数字,同时保留其符号值。这是通过将较小数字的符号位(最高有效位)复制到左侧来完成的。例如,符号扩展4’B 0 101(5),以8位结果在8’b 0000 0101(5),而符号扩展4’B 1 101在(-3)至8位结果8’b 1111 1101(-3)。

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

module top_module (
    input [7:0] in,
    output [31:0] out );//
    assign out = { {24{in[7]}} ,in };
endmodule

复制操作


给定五个1位信号(a,b,c,d和e),在25位输出向量中计算所有25个成对的一位比较。如果要比较的两位相等,则输出应为1。

image.png

如图所示,使用复制和串联运算符可以更轻松地完成此操作。

顶部向量是每个输入的5个重复的串联谁

底部向量是5个重复的输入

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 = ~{{5{a}} ,{5{b}} ,{5{c}} ,{5{d}} ,{5{e}}} ^ { {5{a,b,c,d,e}} };
endmodule
目录
相关文章
|
6月前
|
存储 编译器 索引
Verilog基础【一】
Verilog基础【一】
178 0
|
机器学习/深度学习 算法 搜索推荐
一文读懂FM算法优势,并用python实现!(附代码)
介绍 我仍然记得第一次遇到点击率预测问题时的情形,在那之前,我一直在学习数据科学,对自己取得的进展很满意,在机器学习黑客马拉松活动中也开始建立了自信,并决定好好迎接不同的挑战。 为了做得更好,我购买了一台内存16GB,i7处理器的机器,但是当我看到数据集的时候却感到非常不安,解压缩之后的数据大概有50GB - 我不知道基于这样的数据集要怎样进行点击率预测。
15164 0
|
6月前
|
存储 人工智能 安全
Verilog基础【二】
Verilog基础【二】
186 1
|
6月前
|
算法 关系型数据库 计算机视觉
基于FPGA的9/7整数小波变换和逆变换verilog实现,包含testbench
基于FPGA的9/7整数小波变换和逆变换verilog实现,包含testbench
|
11月前
|
算法
lingo中的一些概念解释
lingo中的一些概念解释
|
存储 程序员 开发工具
第三章 硬件描述语言verilog(一)
第三章 硬件描述语言verilog(一)
414 0
第三章 硬件描述语言verilog(一)
|
达摩院 API C语言
C语言如何使用MindOpt建模并求解混合整数线性规划问题
MindOpt是达摩院决策智能实验室研究的一款优化求解器,能帮助做方案设计、生产方案优化、资源合理分配、辅助决策等。可以支持命令行、c、c++、java和python调用,目前求解算法实现了线性规划、混合整数线性规划、二次规划。
C语言如何使用MindOpt建模并求解混合整数线性规划问题
|
算法
Verilog语法入门(一)简单组合逻辑电路
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
177 0
Verilog语法入门(三)八输入与门
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
329 0
|
索引
HDLBits练习汇总-02-Verilog语言--向量部分(一)
HDLBits练习汇总-02-Verilog语言--向量部分
230 0
HDLBits练习汇总-02-Verilog语言--向量部分(一)