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](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJVeAQ3u-AADUS5Xg6c4945.png)
点击Submit,等待一会就能看到下图结果:
![f84fbac8-5013-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJViARLKCAALrCVJpPig031.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](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJViAaGIHAADkYny7zL4875.png)
点击Submit,等待一会就能看到下图结果:
![f8af938a-5013-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJViAb9ynAANnMZmhHHY999.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](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJViAI7kFAAHKI35DKFY417.png)
点击Submit,等待一会就能看到下图结果:
![f8ee8d88-5013-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJViAQ1jlAAN5V4OzcaI806.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](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJViAYtBBAADexcHoJUk511.png)
点击Submit,等待一会就能看到下图结果:
![f93b6ea0-5013-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJVmAXuf_AAEVWDNRbdw388.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](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJVmAGSPxAADkRwK9L9c857.png)
点击Submit,等待一会就能看到下图结果:
![f95fab4e-5013-11ed-a3b6-dac502259ad0.png](https://file1.elecfans.com//web2/M00/96/DE/wKgZomTnJVmAPvnAAAETV7iGsE0604.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】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
![](https://file1.elecfans.com/web3/M00/03/FE/wKgZO2dt_vuAF4fUAAoizn6FF1o558.png)
![](https://file1.elecfans.com/web3/M00/03/96/wKgZPGdqaBqAGjPRAAJGnOCQEzs434.png)
![](https://file1.elecfans.com/web3/M00/03/98/wKgZO2dqR9CAQgR5AA5ZOlrMok8009.jpg)
![](https://file1.elecfans.com/web1/M00/F4/9A/wKgaoWctzECAK6WsAARtNb_H-H8296.jpg)
![](https://file1.elecfans.com/web1/M00/F3/85/wKgZoWcYnsSAfEjGAAYUEaoJBm0279.jpg)
赛盛EMC在线学习平台:揭秘学习宝典&工具秘籍!
![赛盛EMC<b class='flag-5'>在线</b><b class='flag-5'>学习</b>平台:揭秘<b class='flag-5'>学习</b>宝典&amp;工具秘籍!](https://file.elecfans.com/web2/M00/3F/CE/pYYBAGJqCX2AbtM8AAANJ1_N7GA875.jpg)
![](https://file1.elecfans.com/web2/M00/08/96/wKgZomb4_rGAEUbeAA4SEu88vTc538.jpg)
Verilog testbench问题求助
![](https://file1.elecfans.com/web2/M00/F7/0C/wKgZomaDoEyAB4mjAASUxc8jQXc714.png)
![](https://file1.elecfans.com/web2/M00/EB/09/wKgaomZW3LeAMtX8AAdAA8IjH5c051.png)
![](https://file1.elecfans.com/web2/M00/E9/92/wKgaomZP826ANVatAAGu8ULu75M414.png)
IEEE 1800-2023 SystemVerilog新版本正式发布了!
在Vivado Synthesis中怎么使用SystemVerilog接口连接逻辑呢?
![在Vivado Synthesis中怎么使用<b class='flag-5'>SystemVerilog</b>接口连接逻辑呢?](https://file1.elecfans.com/web2/M00/C3/77/wKgaomXld-OAUMfsAAAWrEAtwqU778.png)
![](https://file1.elecfans.com/web2/M00/C0/50/wKgZomXUWcGAN8DKAAi595zXYZ8766.jpg)
评论