0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Verilog/SystemVerilog硬件描述语言练习数字硬件设计

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-08-31 09:06 次阅读

HDLBits 是一组小型电路设计习题集,使用 Verilog/SystemVerilog 硬件描述语言 (HDL) 练习数字硬件设计~

网址如下:

https://hdlbits.01xz.net/

关于HDLBits的Verilog实现可以查看下面专栏:

https://www.zhihu.com/column/c_1131528588117385216

缩略词索引

SV:SystemVerilog

Problem 15-Vector3

题目说明

模块 32 位输入向量如下所示,按照上下对应关系,输出为下方的 4 个 8-bits 向量。

8f00616e-28c5-11ed-ba43-dac502259ad0.png 图片来自 HDLBits

这个题目的核心就是上面的图片,将上面的输入向量映射到下面向量。

模块端口声明

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

题目解析

这个题目重点是向量拼接,拼接操作符的基本语法使用 { } 将较小的向量括起来,每个 { } 内的向量使用逗号作为间隔。

{3'b111,3'b000}=>6'b111000
{1'b1,1'b0,3'b101}=>5'b10101
{4'ha,4'd10}=>8'b10101010//4'haand4'd10areboth4'b1010inbinary

拼接运算符中的向量务必需要标注位宽,不然综合器怎么能知道你的结果需要多宽的位宽。因此 { 1,2,3 } 这样的操作是非法的,并会产生一个 Error:unsized constants are not allowed in concatenations.

moduletop_module(
inputlogic[4:0]a,b,c,d,e,f,
outputlogic[7:0]w,x,y,z
);//


assignw={a,b[4:2]};
assignx={b[1:0],c,d[4]};
assigny={d[3:0],e[4:1]};
assignz={e[0],f,2'b11};
endmodule

8f13761e-28c5-11ed-ba43-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

8f361228-28c5-11ed-ba43-dac502259ad0.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红(后面会展示)。

这一题就结束了。

Problem 16-Vectorr

题目说明

给定一个 8bit 输入向量,将其反向输出。

模块端口声明

moduletop_module(
input[7:0]in,
output[7:0]out
);

题目解析

这道题难度不大但是不要想着使用assign out[7:0] = in[0:7];解决问题,因为在Verilog中这个语句不起作用,因为Verilog使用向量时的位序应与定义时保持一致。

简单解决就是将输入按照一个一个bit分开,然后重新组合即可。

但是如果向量是1024位呢?大家可以思考,后续还有类似问题,再使用其他方式解决,下面有参考示例。

简单解答

moduletop_module(
inputlogic[7:0]in,
outputlogic[7:0]out
);

assignout={in[0],in[1],in[2],in[3],in[4],in[5],in[6],in[7]};

endmodule


其他方式解决

moduletop_module(
inputlogic[7:0]in,
outputlogic[7:0]out
);
parametercount='d8;

varintegeri;

always_combbegin
for(i=0;i< count; i = i + 1)begin
            out[i] = in[count - i - 1];
        end
    end
    
endmodule

8f4ff9e0-28c5-11ed-ba43-dac502259ad0.png8f741906-28c5-11ed-ba43-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

8f97732e-28c5-11ed-ba43-dac502259ad0.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红(后面会展示)。

这一题就结束了。

Problem 17-Vector4

题目说明

将一个 8bit 有符号数扩展为 32bit 数。

模块端口声明

moduletop_module(
input[7:0]in,
output[31:0]out);

题目解析

本题考查的是向量的复制和拼接语法:{ 重复次数 { 向量 } }。

重复次数必须是一个常量,而且请特别注意重复操作符有两对 { }.外层的 {} 不能少。

如:

{5{1'b1}}//5'b11111(or5'd31or5'h1f)
{2{a,b,c}}//Thesameas{a,b,c,a,b,c}
{3'd5,{2{3'd6}}}//9'b101_110_110.It'saconcatenationof101with
//thesecondvector,whichistwocopiesof3'b110.

还需要注意有符号和无符号的复制:

重复操作符的应用场景之一是在有符号数的扩展。有符号数的扩展是将符号位填充待扩展的比特。比如要将 4bit 的 4'b0101 有符号数扩展为 8bit ,0 是符号位,那么扩展之后为 8'b0000 0101.

moduletop_module(
inputlogic[7:0]in,
outputlogic[31:0]out
);//


assignout={{24{in[7]}},in};

endmodule

8fb88bf4-28c5-11ed-ba43-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

8fd586aa-28c5-11ed-ba43-dac502259ad0.png

注意图中是没有波形的~

这一题就结束了。

Problem 18-Vector5

题目说明

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

8ff7e70e-28c5-11ed-ba43-dac502259ad0.png 图片来自 HDLBits

问题的核心就是上面的图片,相关操作如下:

out[24]=~a^a;//a==a,soout[24]isalways1.
out[23]=~a^b;
out[22]=~a^c;
...
out[1]=~e^d;
out[0]=~e^e;

模块端口声明

moduletop_module(
inputa,b,c,d,e,
output[24:0]out);

题目解析

这个题目还是上一题的延续,属于将几个知识点串联起来,向量复制扩展,XNOR操作,前面知识掌握了这个题目就不难了。

moduletop_module(
inputa,b,c,d,e,
output[24:0]out);//

//TheoutputisXNORoftwovectorscreatedby
//concatenatingandreplicatingthefiveinputs.
//assignout=~{...}^{...};
assignout=~{{5{a}},{5{b}},{5{c}},{5{d}},{5{e}}}^{5{a,b,c,d,e}};


endmodule


900ec708-28c5-11ed-ba43-dac502259ad0.png

点击Submit,等待一会就能看到下图结果:

902fb8be-28c5-11ed-ba43-dac502259ad0.png

注意图中无波形~

这一题就结束了。

总结

今天的几道题就结束了,整体难度不大,后面的题目难度会越来越大~

最后我这边做题的代码也是个人理解使用,有错误欢迎大家批评指正,祝大家学习愉快~

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路设计
    +关注

    关注

    6563

    文章

    2316

    浏览量

    195222
  • 硬件
    +关注

    关注

    11

    文章

    2921

    浏览量

    64744
  • Verilog
    +关注

    关注

    28

    文章

    1325

    浏览量

    109293

原文标题:HDLBits: 在线学习 SystemVerilog(四)-Problem 15-18

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用Verilog/SystemVerilog硬件描述语言练习数字硬件设计

    在实例化模块时,使用Verilog时有两种常用的方式来进行模块端口的信号连接:按端口顺序以及按端口名称连接端口。
    的头像 发表于 09-08 09:04 1243次阅读

    verilog硬件描述语言课程讲义

    verilog硬件描述语言课程讲义
    发表于 08-06 11:35

    Verilog HDL硬件描述语言

    Verilog HDL硬件描述语言
    发表于 01-13 14:40

    Verilog_HDL硬件描述语言

    Verilog_HDL硬件描述语言 FPGA的资料
    发表于 02-26 14:03

    verilog+hdl硬件描述语言

    verilog+hdl硬件描述语言 初学者的福音 帮助广大初学者步入此行
    发表于 08-12 23:47

    Verilog硬件描述语言描述.

    本书简要介绍了Verilog硬件描述语言的基础知识,包括语言的基本内容和基本结构 ,以及利用该语言在各种层次上对
    发表于 03-27 23:44 101次下载

    VERILOG HDL硬件描述语言

    本书简要介绍了Verilog硬件描述语言的基础知识,包括语言的基本内容和基本结构 ,以及利用该语言在各种层次上对
    发表于 07-20 11:36 0次下载

    Verilog HDL硬件描述语言【书籍

    本书简要介绍了Verilog 硬件描述语言的基础知识,包括语言的基本内容和基本结构,以及利用该语言在各种层次上对
    发表于 07-02 14:55 124次下载

    verilog硬件描述语言课程讲义

    verilog硬件描述语言课程讲义
    发表于 05-21 15:01 33次下载
    <b class='flag-5'>verilog</b><b class='flag-5'>硬件</b><b class='flag-5'>描述语言</b>课程讲义

    Verilog硬件描述语言参考手册

    Verilog硬件描述语言参考手册,Verilog语法内容介绍
    发表于 11-12 17:20 0次下载

    Verilog HDL硬件描述语言

    Verilog HDL硬件描述语言 有需要的下来看看
    发表于 12-29 15:31 0次下载

    Verilog硬件描述语言

    VHDL语言编程学习Verilog硬件描述语言
    发表于 09-01 15:27 0次下载

    Verilog HDL硬件描述语言

    Verilog HDL硬件描述语言,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-11 11:20 11次下载

    基于Verilog硬件描述语言的IEEE标准硬件描述语言资料合集免费下载

    本文档的主要内容详细介绍的是基于Verilog硬件描述语言的IEEE标准硬件描述语言资料合集免费下载:1995、2001、2005;
    发表于 06-18 08:00 10次下载

    Verilog硬件描述语言的学习课件免费下载

    本文档的主要内容详细介绍的是Verilog硬件描述语言的学习课件免费下载。
    发表于 01-22 12:13 17次下载
    <b class='flag-5'>Verilog</b><b class='flag-5'>硬件</b><b class='flag-5'>描述语言</b>的学习课件免费下载