文章目录

  • 前言
  • 一、题目描述
  • 二、实现思路
  • 三、代码展示
    • 解法一
    • 解法二
  • 总结

前言


在前面我们对 Verilog 的基础语法知识进行了学习,对 Verilog也有了一定的了解,接下来的一段时间我们就开始在牛客网上进行刷题,巩固我们的基础知识,熟悉用 Verilog 去写代码。 今天我们做的是第一道题——四选一多路器,并附上牛客网刷题的网址:四选一多路器


一、题目描述

制作一个四选一的多路选择器,要求输出为线网类型
状态转换:
d0 11
d1 10
d2 01
d3 00
信号示意图:

波形示意图:

输入描述:
输入信号 d1,d2,d3,d4,sel
类型 wire

输出描述:
输出信号 mux_out
类型 wire

二、实现思路

1.由题可以看出输入与输出的位宽都是2bit
2.然后由波形可以确定出是组合逻辑(输入与输出在同一时刻)
3.并且因为输出定义的是线网类型(wire),所以不能使用 always 组合逻辑块,只能使用连续赋值语句assign来进行赋值;若要使用 always 语句块则需要另外定义一个 reg 型的变量来存储结果,并在输出时使用 assign 语句来赋值。
4.理清对应关系

三、代码展示

解法一

在 always 语句块内赋值,使用 case 语句或者 if…else 语句
1. case 语句

 `timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
reg [1:0] mux_reg;
always @(*) begincase(sel)2'b00: mux_reg <= d0;2'b01: mux_reg <= d1;2'b10: mux_reg <= d2;2'b11: mux_reg <= d3;default:;endcaseend
assign mux_out = mux_reg;
endmodule

2. if…else语句

 `timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
reg [1:0] mux_out_t;
always @(*) beginif(sel == 2'b00)mux_out_t = d0;else if(sel == 2'b01)mux_out_t = d1;else if(sel == 2'b10)mux_out_t = d2;elsemux_out_t = d3;
end
assign mux_out = mux_out_t;
endmodule

解法二

直接使用 assign 语句赋值,使用条件运算符( ? : )

`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
assign mux_out = sel[0]?(sel[1]?d0:d2):(sel[1]?d1:d3);
endmodule

总结

这是我想到的实现四选一多路器设计的三种不同形式,如果还有更多更好的解法,欢迎读到这篇文章的朋友们在评论区告诉我,共同进步嘛。

Verilog学习之四选一多路器设计相关推荐

  1. 小梅哥Xilinx FPGA学习笔记1——二选一多路器

    二选一多路器 〇.功能介绍 1.功能描述 2.原理图 一.代码编写 1.设计文件 2.激励文件 3.仿真图 二.总结 〇.功能介绍 1.功能描述 sl为控制信号,a,b为两个输入信号,out为输出信号 ...

  2. 小梅哥-建工程+二选一多路器

    1. 通过单击 Quick Start 组的 Create Project 来新建一个 Vivado 设计工程. 说明:在 Vivado 的启动界面中分为 Quick Start.Tasks.Lear ...

  3. FPGA _Verilog HDL_8选一多路选择器设计

    一.题目 熟悉QuartusII软件,并设计一个8选1多路选择器,并完成其仿真波形图(贴图). 二.源代码 //-------------------------------------------- ...

  4. Vivado(二选一多路器)

    开发流程 一:Add Sources(二选一多路器代码见下)(Add or creat design sources) module mux2(a,b,sel,out );input a;input ...

  5. 【校招Verilog快速入门】基础语法篇:VL1、四选一多路器

    文章目录 一.题目 二.题解 一.题目 描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换: d0 11 d1 10 d2 01 d3 00 信号示意图: 波形示意图: 输入描述: ...

  6. Verilog学习之数据大小端转换设计

    文章目录 前言 一.题目描述 二.实现思路 1.函数的概念 2.具体思路 三.代码展示 总结 前言 今天我们做的是第十道题--使用函数实现数据大小端转换,这道题其实也比较简单,就是逆向输出一个数据,但 ...

  7. Verilog学习之移位运算与乘法设计

    文章目录 前言 一.题目描述 二.实现思路 1.理解移位运算与状态机 1)移位运算 1>算数移位 2>逻辑移位 2)状态机 1>什么是状态机 2>状态机的类型 Moore 型状 ...

  8. 【牛客网刷题】VL1 四选一多路器

  9. Verilog学习日志(4选一多路选择器)

    初次接触硬件设计相关的东西,对学习过程进行一下记录. 首先根据书上内容设计了一个简单的二选一选择器 Verilog代码如下: module mux2_1 #( parameter DW = 32 // ...

最新文章

  1. pve rust 能拆家吗_RUST:2020年9月第四周:向上向上再向上!
  2. SecureCRT提示----数据库里没找到防火墙“无”----解决方案
  3. 三极管工作原理_4种集电极-基极负反馈式三极管偏置电路的工作原理分析
  4. Linux服务器后台运行jar包
  5. 2017.9.6数学
  6. 复工之后,如何让自己的时间更值钱
  7. 在JDK 11中启动单文件源代码程序
  8. julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算
  9. 树莓派3vnc分辨率设置
  10. linux系统系统安装,深度linux操作系统安装图文教程
  11. (5)树莓派+1个USB有线网卡+1个USB无线网卡做路由器
  12. 北京地标《信息化项目软件开发费用测算规范》完成公开征求意见
  13. Guava学习笔记-Splitter
  14. oracle parallel_max_servers,PARALLEL_MAX_SERVERS参数
  15. 符号链接symlink_什么是符号链接或符号链接? 如何为Windows和Linux创建Symlink?
  16. 三点运算符(...)的使用
  17. Web全栈~05.CSS属性
  18. C++中的new和delete运算符(内存管理)
  19. Server 2019 BPS Provisioning GPT DAX
  20. 超全的AI人工智能学习路线图(内含大纲+视频+工具)

热门文章

  1. 最新zotero与obsidian笔记联动教程(可代替citations和mdnotes)
  2. webstorm 常用插件集合
  3. 单片机交通灯控制系统
  4. idea 导入别人的项目后,显示包的名称错误does not correspond to the file path
  5. iOS中assign和weak的区别
  6. SHA 256算法是什么?哈希算法有哪些特点,主要应用在哪里?
  7. JS实现动态生成表格
  8. 学习java必读书籍
  9. IDEA 离线安装lombok插件
  10. 生产日期当天算一天吗,保质期算当天吗 保质期最后一天算过期吗