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

    文章

    469

    浏览量

    42206
  • Verilog
    +关注

    关注

    28

    文章

    1326

    浏览量

    109302
  • 选择器
    +关注

    关注

    0

    文章

    103

    浏览量

    14322

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

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

收藏 人收藏

    评论

    相关推荐

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的头像 发表于 11-22 09:17 317次阅读
    分享一些<b class='flag-5'>SystemVerilog</b>的coding  guideline

    systemverilog:logic比reg更有优势

    systemverilog协议中,logic定义四态值,即向量(vector)的每个位(bit)可以是逻辑0, 1, Z或X,与verilog协议中的reg很接近。但是logic有个很明显的优势,不允许多驱动。
    的头像 发表于 10-26 09:32 428次阅读
    <b class='flag-5'>systemverilog</b>:logic比reg更有优势

    SystemVerilog在硬件设计部分有哪些优势

    谈到SystemVerilog,很多工程师都认为SystemVerilog仅仅是一门验证语言,事实上不只如此。传统的Verilog和VHDL被称为HDL(Hardware Description
    的头像 发表于 10-19 11:19 450次阅读
    <b class='flag-5'>SystemVerilog</b>在硬件设计部分有哪些优势

    SystemVerilog中的联合(union)介绍

    SystemVerilog 中,联合只是信号,可通过不同名称和纵横比来加以引用。
    的头像 发表于 10-08 15:45 649次阅读
    <b class='flag-5'>SystemVerilog</b>中的联合(union)介绍

    systemverilog:logic比reg更有优势?

    systemverilog协议中,logic定义四态值,即向量(vector)的每个位(bit)可以是逻辑0, 1, Z或X,与verilog协议中的reg很接近。但是logic有个很明显的优势,不允许多驱动。
    的头像 发表于 09-28 17:34 1972次阅读
    <b class='flag-5'>systemverilog</b>:logic比reg更有优势?

    SystemVerilog的随机约束方法

    上一篇文章《暗藏玄机的SV随机化》介绍了SystemVerilog的各种随机化方法,本文将在其基础上引入SystemVerilog的随机约束方法(constraints)。通过使用随机约束,我们可以将随机限制在一定的空间内,有针对性地提高功能覆盖率。
    的头像 发表于 09-24 12:15 473次阅读

    verilog/systemverilog中隐藏的初始化说明

    在Verilog和SystemVerilog中经常需要在使用变量或者线网之前,期望变量和线网有对应的初始值
    的头像 发表于 08-25 09:47 618次阅读
    verilog/<b class='flag-5'>systemverilog</b>中隐藏的初始化说明

    如何实现全面的SystemVerilog语法覆盖

    SystemVeirlog的全面支持是开发商用仿真器的第一道门槛。市面上可以找到不少基于纯Verilog的仿真器,但是真正能完整支持SystemVerilog 的仍然屈指可数。如何全面地支持SystemVerilog语言,是开发仿真器的一个重要任务。
    的头像 发表于 07-14 15:15 381次阅读
    如何实现全面的<b class='flag-5'>SystemVerilog</b>语法覆盖

    SystemVerilog里的regions以及events的调度

    本文讲一下SystemVerilog的time slot里的regions以及events的调度。SystemVerilog语言是根据离散事件执行模型定义的,由events驱动。
    的头像 发表于 07-12 11:20 836次阅读
    <b class='flag-5'>SystemVerilog</b>里的regions以及events的调度

    SystemVerilog的覆盖率建模方式

    为了确保验证的完备性,我们需要量化验证目标。SystemVerilog提供了一套丰富的覆盖率建模方式。
    的头像 发表于 06-25 10:44 570次阅读

    Systemverilog中的Driving Strength讲解

    systemverilog中,net用于对电路中连线进行建模,driving strength(驱动强度)可以让net变量值的建模更加精确。
    的头像 发表于 06-14 15:50 828次阅读
    <b class='flag-5'>Systemverilog</b>中的Driving Strength讲解

    带你了解SystemVerilog中的关联数组

    SystemVerilog中,我们知道可以使用动态数组实现数组元素个数的动态分配,即随用随分
    的头像 发表于 06-09 09:46 4700次阅读
    带你了解<b class='flag-5'>SystemVerilog</b>中的关联数组

    SystemVerilog实用知识点:覆盖率之Function Coverage

    SystemVerilog是一名芯片验证工程师,必须掌握的一门语言,其中Function Coverage是必须要懂的知识点之一;
    的头像 发表于 06-04 16:30 4125次阅读
    <b class='flag-5'>SystemVerilog</b>实用知识点:覆盖率之Function Coverage

    数字硬件建模SystemVerilog之Interface和modport介绍

    SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。
    的头像 发表于 04-28 14:12 2080次阅读
    数字硬件建模<b class='flag-5'>SystemVerilog</b>之Interface和modport介绍

    数字硬件建模SystemVerilog之Interface方法概述

    SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。
    的头像 发表于 04-28 14:10 1315次阅读
    数字硬件建模<b class='flag-5'>SystemVerilog</b>之Interface方法概述