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

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

3天内不再提示

HDLBits: 在线学习SystemVerilog-Problem

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-10-20 09:21 次阅读

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

网址如下:

https://hdlbits.01xz.net/

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

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

缩略词索引

  • SV:SystemVerilog

从今天开始新的一章-Circuits,包括基本逻辑电路、时序电路、组合电路等。

今天更新整个多路选择器一小节题目,多路选择器也是组合电路的基本电路。

Problem 60-Mux2to1

题目说明

创建一个一位宽2路选择器。当 sel=0 时,选择 a。当 sel=1 时,选择 b。

模块端口声明

moduletop_module(
inputa,b,sel,
outputout);

题目解析

这个题目没什么难度,看下面参考代码即可:

moduletop_module(
inputlogica,b,sel,
outputlogicout);

assignout=sel?b:a;


endmodule

f837d93a-5013-11ed-a3b6-dac502259ad0.png

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

f84fbac8-5013-11ed-a3b6-dac502259ad0.png

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

这一题就结束了。

Problem 61-Mux2to1v

题目说明

创建一个100位宽2路选择器。当 sel=0 时,选择 a。当 sel=1 时,选择 b。

模块端口声明

moduletop_module(
input[99:0]a,b,
inputsel,
output[99:0]out);

题目解析

这道题难度不大核心代码只有一行。

简单解答

moduletop_module(
inputlogic[99:0]a,b,
inputlogicsel,
outputlogic[99:0]out);


assignout=sel?b:a;

endmodule
f887119e-5013-11ed-a3b6-dac502259ad0.png

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

f8af938a-5013-11ed-a3b6-dac502259ad0.png

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

这一题就结束了。

Problem 62-Mux9to1v

题目说明

创建一个 16 位宽的 9 选 1 多路选择器。sel=0 选择 a,sel=1 选择 b,等等。对于未使用的情况(sel=9 到 15),将所有输出位设置为“1”。

模块端口声明

moduletop_module(
input[15:0]a,b,c,d,e,f,g,h,i,
input[3:0]sel,
output[15:0]out);

题目解析

这种多路选择,用条件运算显然不合适,所以我们选择使用case。

moduletop_module(
inputlogic[15:0]a,b,c,d,e,f,g,h,i,
inputlogic[3:0]sel,
outputlogic[15:0]out);

always_combbegin
case(sel)
4'd0:begin
out=a;
end
4'd1:begin
out=b;
end
4'd2:begin
out=c;
end
4'd3:begin
out=d;
end
4'd4:begin
out=e;
end
4'd5:begin
out=f;
end
4'd6:begin
out=g;
end
4'd7:begin
out=h;
end
4'd8:begin
out=i;
end
default:begin
out=16'hffff;
end
endcase
end

endmodule

f8ddef00-5013-11ed-a3b6-dac502259ad0.png

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

f8ee8d88-5013-11ed-a3b6-dac502259ad0.png

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

这一题就结束了。

Problem 63-Mux256to1

题目说明

创建一个 1 位宽、256 选 1 的多路选择器。256 个输入打包成一个 256 位输入向量。sel=0 应该选择in[0], sel=1 选择in[1]位, sel=2 选择in[2]位,等等。

模块端口声明

moduletop_module(
input[255:0]in,
input[7:0]sel,
outputout);

题目解析

题目输入是一个向量,我们在设计的时候不可能按照case或者三元运算去做设计(工作量巨大),所以我们需要观察这个题目的特点,输入是256位宽,是不是2^8次方?

根据题目提示:选择运算符的 index 可以为变量,只要变量的位宽和向量的长度匹配即可。

So?

moduletop_module(
inputlogic[255:0]in,
inputlogic[7:0]sel,
outputlogicout);
assignout=in[sel];
endmodule
f9229506-5013-11ed-a3b6-dac502259ad0.png

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

f93b6ea0-5013-11ed-a3b6-dac502259ad0.png

注意图中无波形。

这一题就结束了。

Problem 64-Mux256to1v

题目说明

本题中需要实现一个 256 选 1 选择器,sel 信号作为选择信号,当 sel = 0 时选择 in[3:0],sel = 1 时选择 in[7:4],以此类推。同上一题的区别在于,位宽从 1 位变到了 4 位。

模块端口声明

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

题目解析

将上一题答案稍加改造即可,选择的位跨4位并且+4。

moduletop_module(
inputlogic[1023:0]in,
inputlogic[7:0]sel,
outputlogic[3:0]out);
assignout=in[sel*4+:4];
endmodule
f945828c-5013-11ed-a3b6-dac502259ad0.png

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

f95fab4e-5013-11ed-a3b6-dac502259ad0.png

注意图中无波形。

这一题就结束了。

总结

今天的几道题就结束了,整体比较简单,没有复杂的代码,没有复杂的设计思路。

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

代码链接:

https://github.com/suisuisi/SystemVerilog/tree/main/SystemVerilogHDLBits


审核编辑 :李倩


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

    关注

    13

    文章

    494

    浏览量

    42740
  • Verilog
    +关注

    关注

    28

    文章

    1352

    浏览量

    110511
  • 选择器
    +关注

    关注

    0

    文章

    109

    浏览量

    14598

原文标题:HDLBits: 在线学习 SystemVerilog(十一)-Problem 60-64

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

收藏 人收藏

    评论

    相关推荐

    微气象在线监测装置气象环境实时在线监测数据稳定可靠

    在线监测
    jf_96960730
    发布于 :2024年12月27日 09:17:07

    KMPHM在线监测平台实现设备高效管理#在线监测#振动监测#振动在线监测

    在线监测
    KM预测性维护专家
    发布于 :2024年12月24日 13:34:35

    快来KM振动在线监测系统参与石化设备运维大会的风采吧!#振动在线监测#振动监测

    在线监测
    KM预测性维护专家
    发布于 :2024年11月08日 16:31:03

    KM振动在线监测系统助力设备焕新升级#振动在线监测#振动监测#在线监测

    在线监测
    KM预测性维护专家
    发布于 :2024年10月23日 14:59:48

    赛盛EMC在线学习平台:揭秘学习宝典&工具秘籍!

    《赛盛在线学习及工具应用》线上发布会SESOnline【经验结晶,智启未来之路】在电磁兼容浩瀚海洋中,我们深耕近二十年,积累了丰富的EMC(电磁兼容)技术经验及培训经验。此刻,这份深厚积累汇成知识
    的头像 发表于 10-11 08:03 969次阅读
    赛盛EMC<b class='flag-5'>在线</b><b class='flag-5'>学习</b>平台:揭秘<b class='flag-5'>学习</b>宝典&amp;amp;工具秘籍!

    KMPHM振动在线监测助力企业轻装上阵#振动在线监测 #在线监测 #振动监测

    在线监测
    KM预测性维护专家
    发布于 :2024年09月29日 15:17:03

    Vivado 2024.1版本的新特性(2)

    从综合角度看,Vivado 2024.1对SystemVerilog和VHDL-2019的一些特性开始支持。先看SystemVerilog
    的头像 发表于 09-18 10:34 1129次阅读
    Vivado 2024.1版本的新特性(2)

    Verilog testbench问题求助

    这是我在HDLbits网站上做到的一道题,是testbench,请问这个代码为什么input都是低电平0?我设置的时钟就是周期10ns,占空比50%的时钟信号啊?怎么会出现这种情况......
    发表于 07-21 11:14

    杆塔倾斜在线监测

    在线监测
    jf_96960730
    发布于 :2024年07月02日 14:38:06

    #物联网 斯塔克积水在线监测

    物联网在线监测
    斯塔克物联科技
    发布于 :2024年05月29日 15:44:20

    #物联网 窨井在线监测系统

    物联网在线监测
    斯塔克物联科技
    发布于 :2024年05月24日 09:55:14

    IEEE 1800-2023 SystemVerilog新版本正式发布了!

    2024年3月初,在美国硅谷举办的DVCon2024上,IEEE-SA和Accellera联合宣布通过IEEE Get Program可以免费获取IEEE 1800-2023 SystemVerilog语言参考手册。
    的头像 发表于 03-20 13:52 1926次阅读

    在Vivado Synthesis中怎么使用SystemVerilog接口连接逻辑呢?

    SystemVerilog 接口的开发旨在让设计中层级之间的连接变得更加轻松容易。 您可以把这类接口看作是多个模块共有的引脚集合。
    的头像 发表于 03-04 15:25 1058次阅读
    在Vivado Synthesis中怎么使用<b class='flag-5'>SystemVerilog</b>接口连接逻辑呢?

    高压导线弧垂如何在线监测?FH-9006北斗导线弧垂在线监测装置帮助您!

    导线在线监测
    jf_96960730
    发布于 :2024年02月20日 15:51:15