写在前面

  1. 这个专栏的内容记录的是牛客的Verilog题库刷题。
  2. 牛客算是一个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和覆盖率)相关推荐

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

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

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

  3. Verilog学习之四选一多路器设计

    文章目录 前言 一.题目描述 二.实现思路 三.代码展示 解法一 解法二 总结 前言 ​ 在前面我们对 Verilog 的基础语法知识进行了学习,对 Verilog也有了一定的了解,接下来的一段时间我 ...

  4. Verilog练习笔记(四选一多路选择器)

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

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

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

  6. Vivado(二选一多路器)

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

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

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

  8. 四选一多路开关电路描述

    //四选一多路开关MUX4-1 module MUX4-1 (EN ,IN0 ,IN1 ,IN2 ,IN3 ,SEL ,OUT ); input EN ; //使能端 input [7:0] IN0 ...

  9. 四选一多路选择器MUX41a

    四选一多路选择器的代码如下,保存路径不能有中文!! 文件名保存为模块名. (Cyclone III-----EP3C40Q240C8) 编译无错误后: File-New-VMF Edit--Inser ...

  10. 利用Block Design在Vivado实现三位四选一多路选择器

    一.要求:利用Block Design设计一个三位 4 选 1 多路选择器电路 二.实验原理: 真值表: Block Design原理图 三.设计过程 Block Design 将自己编写的与门,非门 ...

最新文章

  1. Flask框架-基本使用
  2. scss安装_安装了这9个免费PS插件后,终于能正常时间下班了……
  3. SAP MM模块调研问卷
  4. 【PPT下载】第二批PPT干货限时免费分享
  5. 在Java 里面怎么比较字符串
  6. Java设计模式之迭代器模式
  7. 设计师Yoyo:为用户设计产品,让他们生活更美好
  8. Report Style
  9. “好师父”如何破解大学生就业难题
  10. 150330之软件测试
  11. matlab模拟信号受噪声干扰分析,如何用matlab编写噪声调频干扰信号
  12. 微信小程序——拼图游戏案例
  13. 在VC++中的MFC利用一个dialoge对话框中按钮调用另一个dialoge对话框
  14. i7 8700k linux,性能起飞!I7-8700K 手动超频和一键超频教程
  15. LINUX 常见问题1000个详细解答
  16. cadence安装完怎么打开_Cadence IC使用教程
  17. java环信后端接口
  18. 组装电脑千万不要随便买
  19. OpenCV-Python (官方)中文教程(部分三)
  20. Python字符串相关方法

热门文章

  1. vue 3.0(通用) 表格导出成Excel文件或HTML转word文档
  2. 华为悦盒EC6018V9E线刷linux教程
  3. 关于JavaScript闭包理解
  4. 首次 golang爬虫插件gocolly/colly 使用经历
  5. Ubuntu18.04配置ORB SLAM3
  6. Java调用第三方http接口的常用方式
  7. ❤️【图文并茂】Chrome浏览器(油猴子)插件安装使用教程❤️
  8. GD32 NAND U盘
  9. 基于中间件的开发---中间件技术
  10. python实现小波降噪_15转载python实现小波分解【实测成功】