Verilog学习之四选一多路器设计
文章目录
- 前言
- 一、题目描述
- 二、实现思路
- 三、代码展示
- 解法一
- 解法二
- 总结
前言
在前面我们对 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学习之四选一多路器设计相关推荐
- 小梅哥Xilinx FPGA学习笔记1——二选一多路器
二选一多路器 〇.功能介绍 1.功能描述 2.原理图 一.代码编写 1.设计文件 2.激励文件 3.仿真图 二.总结 〇.功能介绍 1.功能描述 sl为控制信号,a,b为两个输入信号,out为输出信号 ...
- 小梅哥-建工程+二选一多路器
1. 通过单击 Quick Start 组的 Create Project 来新建一个 Vivado 设计工程. 说明:在 Vivado 的启动界面中分为 Quick Start.Tasks.Lear ...
- FPGA _Verilog HDL_8选一多路选择器设计
一.题目 熟悉QuartusII软件,并设计一个8选1多路选择器,并完成其仿真波形图(贴图). 二.源代码 //-------------------------------------------- ...
- Vivado(二选一多路器)
开发流程 一:Add Sources(二选一多路器代码见下)(Add or creat design sources) module mux2(a,b,sel,out );input a;input ...
- 【校招Verilog快速入门】基础语法篇:VL1、四选一多路器
文章目录 一.题目 二.题解 一.题目 描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换: d0 11 d1 10 d2 01 d3 00 信号示意图: 波形示意图: 输入描述: ...
- Verilog学习之数据大小端转换设计
文章目录 前言 一.题目描述 二.实现思路 1.函数的概念 2.具体思路 三.代码展示 总结 前言 今天我们做的是第十道题--使用函数实现数据大小端转换,这道题其实也比较简单,就是逆向输出一个数据,但 ...
- Verilog学习之移位运算与乘法设计
文章目录 前言 一.题目描述 二.实现思路 1.理解移位运算与状态机 1)移位运算 1>算数移位 2>逻辑移位 2)状态机 1>什么是状态机 2>状态机的类型 Moore 型状 ...
- 【牛客网刷题】VL1 四选一多路器
- Verilog学习日志(4选一多路选择器)
初次接触硬件设计相关的东西,对学习过程进行一下记录. 首先根据书上内容设计了一个简单的二选一选择器 Verilog代码如下: module mux2_1 #( parameter DW = 32 // ...
最新文章
- pve rust 能拆家吗_RUST:2020年9月第四周:向上向上再向上!
- SecureCRT提示----数据库里没找到防火墙“无”----解决方案
- 三极管工作原理_4种集电极-基极负反馈式三极管偏置电路的工作原理分析
- Linux服务器后台运行jar包
- 2017.9.6数学
- 复工之后,如何让自己的时间更值钱
- 在JDK 11中启动单文件源代码程序
- julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算
- 树莓派3vnc分辨率设置
- linux系统系统安装,深度linux操作系统安装图文教程
- (5)树莓派+1个USB有线网卡+1个USB无线网卡做路由器
- 北京地标《信息化项目软件开发费用测算规范》完成公开征求意见
- Guava学习笔记-Splitter
- oracle parallel_max_servers,PARALLEL_MAX_SERVERS参数
- 符号链接symlink_什么是符号链接或符号链接? 如何为Windows和Linux创建Symlink?
- 三点运算符(...)的使用
- Web全栈~05.CSS属性
- C++中的new和delete运算符(内存管理)
- Server 2019 BPS Provisioning GPT DAX
- 超全的AI人工智能学习路线图(内含大纲+视频+工具)