VL1_四选一多路器(完整RTL、Testbench和覆盖率)
写在前面
- 这个专栏的内容记录的是牛客的Verilog题库刷题。
- 牛客算是一个
Verilog宝藏刷题网站
了,网站提供在线仿真环境,不用自己找题(点击直达),<刷题记录>专栏,持续打卡中…
文章目录
- 一、题目
- 1. 题目描述
- 2. 状态转换
- 3. 信号示意图
- 4. 波形示意图
- 5. 输入描述
- 6. 输出描述
- 二、分析
- 三、RTL
- 四、Testbench
- 五、结果分析
- (1) TB结果
- (2)波形图
- (3)覆盖率
一、题目
1. 题目描述
制作一个四选一的多路选择器,要求输出定义上为线网类型
2. 状态转换
信号 | 二进制码 |
---|---|
d0 | 11 |
d1 | 10 |
d2 | 01 |
d3 | 00 |
3. 信号示意图
4. 波形示意图
5. 输入描述
输入信号 | d0 | d1 | d2 | d3 | sel |
---|---|---|---|---|---|
类型 | wire | wire | wire | wire | wire |
6. 输出描述
输出信号 | mux_out |
---|---|
类型 | wire |
二、分析
由波形图可以得到下面的表格
信号 | 片选值 | mux_out |
---|---|---|
sel | 2’b00 | d3(2‘b10) |
sel | 2’b01 | d2(2’b01) |
sel | 2’b10 | d1 (2’b00) |
sel | 2’b11 | d0 (2‘b11) |
软件思想上,有两种实现方法,一是使用if-else,二是使用case语句。实际对应的电路实际上都是数选器。
实现的方式有三种,一是使用四输入查找表case方式;二是使用if-else if-else;三是使用两个二输入的查找表方式,此方法使用的资源一样,但是速度提升一倍
(如果if-else if-…过长,也可以使用类似的方法进行分割,利用并行执行的特点进行优化
。)
三、RTL
`timescale 1ns/1ns
module mux4_1(input [1:0] d0 ,input [1:0] d1 ,input [1:0] d2 ,input [1:0] d3 ,input [1:0] sel ,output [1:0] mux_out
);reg [1:0] mux_out_tmp;always @ (*)begincase(sel)2'b00: mux_out_tmp = d3;2'b01: mux_out_tmp = d2; 2'b10: mux_out_tmp = d1; 2'b11: mux_out_tmp = d0; default: mux_out_tmp = d0;endcase
end/*
always @ (*)beginif(sel == 2'b00) mux_out_tmp = d3;else if(sel == 2'b01) mux_out_tmp = d2;else if(sel == 2'b10) mux_out_tmp = d1;else mux_out_tmp = d0;
end
*/assign mux_out = mux_out_tmp;endmodule
四、Testbench
module tb_mux4_1;reg [1:0] mux_out;reg [1:0] d3 ;reg [1:0] d2 ;reg [1:0] d1 ;reg [1:0] d0 ;reg [1:0] sel ;initial begind0 = 2'b11;d1 = 2'b00;d2 = 2'b01;d3 = 2'b10;case_4(sel,2'b00);case_4(sel,2'b01);case_4(sel,2'b10);case_4(sel,2'b11);repeat(100)begincase_random(sel); end
end/*-----------------------------------------------\-- --
\-----------------------------------------------*/
task case_4;output [1:0] a;input [1:0] b;case(b)2'b00: a = 2'b00;2'b01: #1 a = 2'b01;2'b10: #1 a = 2'b10;2'b11: #1 a = 2'b11;endcase
endtask/*-----------------------------------------------\-- --
\-----------------------------------------------*/
task case_random;output [1:0] a;#1 a = {$random}%4;
endtaskalways@(mux_out) begin if(mux_out == sel )begin//$display("Expected decryption result: %d", sel);//$display("Actual decryption result: %d", mux_out);//$display("Correct! The same as the expected!\n");endelse if({!mux_out[1],mux_out[0]} == sel)begin//$display("Expected decryption result: %d", sel);//$display("Actual decryption result: %d", mux_out);//$display("Correct! The same as the expected!\n");endelse begin$display("Expected decryption result: %d", sel);$display("Actual decryption result: %d", mux_out);$display("Error!,sel= %d,out= %d\n",sel,mux_out);end
endmux4_1 tb_mux4_1(.d0(d0),.d1(d1),.d2(d2),.d3(d3),.sel(sel),.mux_out(mux_out)
);initial #100 $finish;
initial begin$fsdbDumpfile("mux4_1.fsdb");$fsdbDumpvars ;$fsdbDumpMDA ;
end
endmodule
五、结果分析
(1) TB结果
结果正常。在Testbench中写到,当预期值和结果不一致时,会出现"Error"并打印当前预期值和实际值。
(2)波形图
(3)覆盖率
可以看到,总覆盖率是80.95%,并不到100%。原因在于受信号翻转覆盖率的影响,由图三可以看到,因为
输入信号d0~d3始终不变
,但是行覆盖率达到100%。
✍✍☛ 题库入口
经过一段时间的沉淀,发现入行IC行业,自己的底子还是很差,写的文章质量参差不齐,也没能解答大家的疑问。决定还是要实打实从基础学起,由浅入深。因此决定通过补充/完善基础知识的同时,通过题库刷题不断提高自己的设计水平,题库推荐给大家(点击直达),<题库记录>栏目不定期更新,欢迎前来讨论。2022.09.05 记
作者:xlinxdu
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。
VL1_四选一多路器(完整RTL、Testbench和覆盖率)相关推荐
- 【校招Verilog快速入门】基础语法篇:VL1、四选一多路器
文章目录 一.题目 二.题解 一.题目 描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换: d0 11 d1 10 d2 01 d3 00 信号示意图: 波形示意图: 输入描述: ...
- 【牛客网刷题】VL1 四选一多路器
- Verilog学习之四选一多路器设计
文章目录 前言 一.题目描述 二.实现思路 三.代码展示 解法一 解法二 总结 前言 在前面我们对 Verilog 的基础语法知识进行了学习,对 Verilog也有了一定的了解,接下来的一段时间我 ...
- Verilog练习笔记(四选一多路选择器)
制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换: d0 11 d1 10 d2 01 d3 00 信号示意图: 波形示意图: 输入描述: 输入信号 d1,d ...
- 小梅哥-建工程+二选一多路器
1. 通过单击 Quick Start 组的 Create Project 来新建一个 Vivado 设计工程. 说明:在 Vivado 的启动界面中分为 Quick Start.Tasks.Lear ...
- Vivado(二选一多路器)
开发流程 一:Add Sources(二选一多路器代码见下)(Add or creat design sources) module mux2(a,b,sel,out );input a;input ...
- 小梅哥Xilinx FPGA学习笔记1——二选一多路器
二选一多路器 〇.功能介绍 1.功能描述 2.原理图 一.代码编写 1.设计文件 2.激励文件 3.仿真图 二.总结 〇.功能介绍 1.功能描述 sl为控制信号,a,b为两个输入信号,out为输出信号 ...
- 四选一多路开关电路描述
//四选一多路开关MUX4-1 module MUX4-1 (EN ,IN0 ,IN1 ,IN2 ,IN3 ,SEL ,OUT ); input EN ; //使能端 input [7:0] IN0 ...
- 四选一多路选择器MUX41a
四选一多路选择器的代码如下,保存路径不能有中文!! 文件名保存为模块名. (Cyclone III-----EP3C40Q240C8) 编译无错误后: File-New-VMF Edit--Inser ...
- 利用Block Design在Vivado实现三位四选一多路选择器
一.要求:利用Block Design设计一个三位 4 选 1 多路选择器电路 二.实验原理: 真值表: Block Design原理图 三.设计过程 Block Design 将自己编写的与门,非门 ...
最新文章
- Flask框架-基本使用
- scss安装_安装了这9个免费PS插件后,终于能正常时间下班了……
- SAP MM模块调研问卷
- 【PPT下载】第二批PPT干货限时免费分享
- 在Java 里面怎么比较字符串
- Java设计模式之迭代器模式
- 设计师Yoyo:为用户设计产品,让他们生活更美好
- Report Style
- “好师父”如何破解大学生就业难题
- 150330之软件测试
- matlab模拟信号受噪声干扰分析,如何用matlab编写噪声调频干扰信号
- 微信小程序——拼图游戏案例
- 在VC++中的MFC利用一个dialoge对话框中按钮调用另一个dialoge对话框
- i7 8700k linux,性能起飞!I7-8700K 手动超频和一键超频教程
- LINUX 常见问题1000个详细解答
- cadence安装完怎么打开_Cadence IC使用教程
- java环信后端接口
- 组装电脑千万不要随便买
- OpenCV-Python (官方)中文教程(部分三)
- Python字符串相关方法