目录

前言

3.1.2.1 2 to 1multiplexer(Mux2to1)

Solution:

3.1.2.2 2 to 1 bus multiplexer(Mux2to1v)

Solution:

3.1.2.3 9 to 1multiplexer(Mux9to1v)

Solution:

3.1.2.4 256 to 1multiplexer(Mux256to1)

Solution:

3.1.2.5 256 to 1 4-bit multiplexer(Mux256to1v)

Solution:


前言

HDLbits网站如下

Problem sets - HDLBits (01xz.net)

从本期开始我们继续HDLbits第三章Circuits的学习,本期的内容是3.1.2Multiplexer


3.1.2.1 2 to 1multiplexer(Mux2to1)

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

期望的答案长度:1行

Hint:三目运算符(cond ? iftrue : iffalse)的可读性更强

Solution:

module top_module (input a,input b,input sel,output out
);assign out = (sel & b) | (~sel & a); // 数据选择器由与门和或门表示// 三目运算符的可读性更强,特别是面对向量时:assign out = sel ? b : a;endmodule

3.1.2.2 2 to 1 bus multiplexer(Mux2to1v)

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

期望的答案长度:1行

Hint:三目运算符(cond ? iftrue : iffalse)的可读性更强

Solution:

module top_module (input [99:0] a,input [99:0] b,input sel,output [99:0] out
);assign out = sel ? b : a;// 下面这种形式不能工作:// assign out = (sel & b) | (~sel & a);endmodule

本题中,sel是1位向量,而a、b皆是100位向量,使用assign out = (sel & b) | (~sel & a);

sel&b表示b[99:1]并没有驱动逻辑,由时序图可以看到,out=a

而换成assign out = ({100{sel}} & b) | ({100{~sel}} & a); 可以正常运行。


3.1.2.3 9 to 1multiplexer(Mux9to1v)

创建一个16位宽的9选1数据选择器。当sel=0时,选择a;当sel=1时,选择b,以此类推。对于没有用到的项(sel=9到15),所有输出位都设为“1”

Hint:对于这么多选项,case语句可能会很有用

Solution:

module top_module (input [15:0] a,input [15:0] b,input [15:0] c,input [15:0] d,input [15:0] e,input [15:0] f,input [15:0] g,input [15:0] h,input [15:0] i,input [3:0] sel,output logic [15:0] out
);// case语句只能在过程块(always块)中使用。这是一个组合电路,所以使用组合always块always @(*) beginout = '1;      // '1 是所有位都设为1的特殊文字语法 '0, 'x, 'z 也是有效的//  我习惯先声明out的默认值,来代替case语句中的default项case (sel)4'h0: out = a;4'h1: out = b;4'h2: out = c;4'h3: out = d;4'h4: out = e;4'h5: out = f;4'h6: out = g;4'h7: out = h;4'h8: out = i;endcaseendendmodule

3.1.2.4 256 to 1multiplexer(Mux256to1)

创建一个1位宽的256选1数据选择器。256位输入都打包成一个256位的输入向量。sel=0,选择in[0];sel=1,选择in[1];sel=2,选择in[2]

期望的答案长度:1行

Hint:

  • 有了这么多选项,case 语句就没那么有用了。
  • 只要综合器可以确定所选位的宽度是恒定的,则向量索引可以是可变的。特别是,使用变量索引从向量中选择一位是可行的。

Solution:

module top_module (input [255:0] in,input [7:0] sel,output  out
);assign out = in[sel];endmodule

 3.1.2.5 256 to 1 4-bit multiplexer(Mux256to1v)

创建一个4位宽的256选1数据选择器。256个4bit输入都打包成一个1024位的输入向量。sel=0,选择in[3:0];sel=1,选择in[7:4];sel=2,选择in[11:8]

期望的答案长度:1-5行

Hint:

  • 有了这么多选项,case 语句就没那么有用了。
  • 只要综合器可以确定所选位的宽度是恒定的,则向量索引可以是可变的。但他并不总是擅长于此。有error "... is not a constant",意味着它不能证明选择宽度是恒定的。特别是 in[ sel*4+3 : sel*4 ] 不起作用。
  • 位切片(“索引向量部分选择”,自 Verilog-2001 起)具有更紧凑的语法。

Solution:

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

我们不能部分选择多个位,但我们可以一次选择一位、重复四次,然后将它们连接在一起。

或者,片选多个比特的方法有两种:

  • assign out = in[sel*4 +: 4];  //选择从索引“sel*4”开始,然后选择总宽度为 4 位的 (+:) 索引号递增。
  • assign out = in[sel*4+3 -: 4];    // 选择从索引 "sel*4+3" 开始,然后选择总宽度为 4 位的 (-:) 索引号递减。
  • 请注意:宽度必须是恒定的(本题中是4)

还算比较简单,同时学习了片选的新语法

Verilog HDLBits 第八期:3.1.2 Multiplexer相关推荐

  1. android 周报,MAndroid 周报第八期

    MAndroid 周报第八期 写在前面的话 大家补充的库 一.开源库 简单好用的ratingbar image RecyclerView下拉刷新,自动加载更多:仿IOS侧滑Item删除菜单 image ...

  2. 写在马哥教育第八期开始之前

    "你不能剥夺别人思考的权力"!记得读研期间一位导师在谈到"传道.授业.解惑"时特地强调.当时身为学生,并未能完全.真切地理解这位导师表述的真正意图.而当自己独立 ...

  3. 信息安全意识电子期刊第八期

    2019独角兽企业重金招聘Python工程师标准>>> 信息安全意识电子期刊第八期 网购热潮兴起,支付安全备受关注.虽然网上支付快捷方便,但是仍存在着很多的安全隐患,账户里的钱被莫名 ...

  4. 推荐八款来自极客标签的超棒前端特效[第八期]

    为什么80%的码农都做不了架构师?>>>    日期:2013-6-24  来源:GBin1.com 本周,我们带来了极客社区推荐的10款前端特效,非常有趣的小游戏和页面生成.希望可 ...

  5. 抢票 | AI未来说学术论坛第八期 深度学习特别专场

    AI已来,而你来不来!? 人工智能论坛如今浩如烟海,有硬货.有干货的讲座却百里挑一."AI未来说"青年学术论坛第八期如约而至.来自中国科学院大学的"AI小鸭学院" ...

  6. 发布 项目_第十八期科创基金项目发布会圆满结束

    第十八期科创基金项目发布会圆满结束 贺电!贺电! 电子信息工程学院发来贺电:第十八届科创基金项目发布会圆满结束啦!感谢导师们的支持.现场同学的热情参与和科协朋友后勤服务! NUAA 即使是寒冷的冬天也 ...

  7. java设计单词英译汉小助手_拣单词|第八期第3天:第521528个单词宝藏

    宝 藏 坚持每天拣单词 积累你的词汇宝藏 打好英语学习基本功 怎么学? 每天预留15分钟,积累你的词汇宝藏! 每周一.二.三,发布新单词 每周四.五.六,乱序复习单词 周日测试(仅限入群的学员) 遇到 ...

  8. c语言sort函数_C语言的那些经典程序 第八期

    戳"在看"一起来充电吧! C语言的那些经典程序 第八期 上期带大家欣赏的指针经典程序,感觉如何?这期我们准备了几个新指针的内容,灵活运用指针可以大大减少程序的复杂度,接下来就让小C ...

  9. 微信小程序周报(第八期)

    2019独角兽企业重金招聘Python工程师标准>>> 微信小程序联盟--微信小程序周报 每周一笑 客户被绑,蒙眼,惊问:"想干什么?"对方不语,鞭笞之,客户求饶 ...

最新文章

  1. 线性代数:04 特征值与特征向量 -- 特征值与特征向量
  2. 投影与三维视觉——本征矩阵和基础矩阵
  3. php自定义模块,简单介绍OpenCart自定义模块
  4. mxGraph实现按住ctrl键盘拖动图形实现复制图形功能
  5. 《CCNP ROUTE 300-101认证考试指南》——2.10节 复习所有考试要点
  6. 2. CSS 高级语法
  7. day10--Matplotlib--条形图与散点图
  8. 驾考一点通维语版_驾校一点通维语版2019下载_驾校一点通维语版下载 v7.6.1 - 87G手游网...
  9. java文档生成器_最好用的数据库文档生成工具
  10. react中axios封装ajax,【逆流而上】[React]axios的封装使用
  11. python 把文件夹压缩成tar的代码
  12. 2021多校补题(8)
  13. 【C语言】C文件编译时间,日期,行号,文件名获取方式
  14. matlab ols regress,计量经济学简单线性回归OLS的Matlab程序.pdf
  15. 软件工程团队项目——搜查令
  16. 【C/C++基础进阶系列】特殊函数总结
  17. 12864液晶显示出十进制数据
  18. Python seaborn.barplot绘图将纵轴设置成百分比形式
  19. java反射字段6,java反射判断字段类型
  20. Detr的数据流,详细的维度信息

热门文章

  1. python把图片识别成文字
  2. 人MR1四聚体研究背景,及实验应用展示
  3. 网上发不出去的那些敏感词,是如何被屏蔽掉的?
  4. KITTI 数据集(CVPR 2012) - 点云 3D
  5. 中国工业气体行业需求分析及未来前景规划报告2021年版
  6. 如果火锅只能吃三样......
  7. U盘维护系统无法启动,启动蓝屏(0xa5)一种可行的解决办法
  8. ZZUIL题解1091-1100
  9. ActiveMQ入门-amq入门
  10. 生活小程序摩拜单车为啥投开锁功能?生活小程序是趋势?