摘要:Verilog 数据选择器 参数化

1、使用场景

在有些场景下,需要用到可参数化的数据选择器。比如,将DDR设计成多通道时,地址的选通和数据的选通,需要实现多选一。实际工程当中需要把DDR划分成几个通道是不确定的,所以数据选择器是从几路里面选择一路是不确定的。常规做法是用case语句实现数据选择器,然而,Verilog的case语句不够灵活,无法做到参数化,就无法做到通用性。这个时候就引出了数据选择器的参数化设计。

2、工程实现

数据选择器的参数化设计,其核心就是二维数组,通过二维数组索引的方式实现可以做到参数化。下面是具体代码实现,仅供参考。

模块代码:

module binary_mux #(parameter dataNum   = 5,parameter dataWidth = 8,parameter log2N     = $clog2(dataNum)
) (input  wire  [log2N-1:0]                    sel,input  wire  [dataNum*dataWidth-1:0]        din,output reg   [dataWidth-1:0]                dout
);wire  [dataWidth-1:0]                       din_array [2**log2N-1:0];generatebegingenvar i;for (i = 0; i < 2**log2N; i = i + 1) beginif (i < dataNum) beginassign din_array[i] = din[dataWidth*i +: dataWidth];end else beginassign din_array[i] = din[dataWidth*0 +: dataWidth];endendendendgeneratealways@(*)begindout = din_array[sel];end///*binary_mux #(.dataNum (dataNum ), .dataWidth (dataWidth )) u_binary_mux(.sel (sel ), .din (din ), .dout (dout ));*/endmodule

RTL原理图:

仿真模块:

//~ `New testbench
`timescale  1ns / 1psmodule tb_binary_mux;// unit_data_mux Parameters
parameter PERIOD     = 10;
parameter dataNum    = 5;
parameter dataWidth  = 8;
parameter log2N      = $clog2(dataNum);// unit_data_mux Inputs
reg   clk                                  = 1 ;
reg   reset                                = 1 ;
reg   [log2N-1:0]  sel                     = 0 ;
reg   [dataNum*dataWidth-1:0]  din       = 0 ;// unit_data_mux Outputs
wire  [dataWidth-1:0]  dout                ;initial
beginforever #(PERIOD/2)  clk=~clk;
endinitial
begin#(PERIOD*2) reset  =  0;
endalways @(posedge clk ) beginif (reset) begindin[dataWidth*0 +: dataWidth] <= 'd1;din[dataWidth*1 +: dataWidth] <= 'd2;din[dataWidth*2 +: dataWidth] <= 'd3;din[dataWidth*3 +: dataWidth] <= 'd4;din[dataWidth*4 +: dataWidth] <= 'd5;sel                           <= 'd0;end else begindin <= din;sel <= sel + 'd1;end
endbinary_mux #(.dataNum   ( dataNum   ),.dataWidth ( dataWidth ))u_binary_mux (.sel                     ( sel   [log2N-1:0]               ),.din                     ( din   [dataNum*dataWidth-1:0]   ),.dout                    ( dout  [dataWidth-1:0]           )
);endmodule

仿真波形:

说明:这里的数据个数不一定需要是2^N,没有这个限制,可自行设置非2^N的整数倍时的默认输出值,这里设计的是默认输出是0路。

Verilog数据选择器参数化设计相关推荐

  1. 【数字逻辑 Verilog】全面剖析数据选择器——从基础到拓展,从理论到设计的实现,从表面到本质

    0 前言 0.1 使用环境 EDA工具:Vivado 2017.4 硬件描述语言:Verilog HDL 0.2 涉及知识 数字逻辑 Verilog 1 基础模块:一位四选一数据选择器 1.1 设计部 ...

  2. Quartus II使用说明(Verilog HDL二选一数据选择器 )

    <可编程数字逻辑电路设计>课程中Quartus II软件的使用说明 VHDL和Verilog HDL不一样. 1.新建文件夹,里面包含5个子文件夹(doc/img/prj/rtl/test ...

  3. Verilog——74HC151八选一数据选择器并扩展为16选1数据选择器

    Verilog--74HC151八选一数据选择器并扩展为16选1数据选择器 74HC151的仿真 设计思路 采用行为级建模,根据74HC151八选一数据选择器的功能表编程即可. 代码实现 设计模块 / ...

  4. Verilog VHDL三种建模描述方式——2选1数据选择器

    标题Quartus II 标题 Verilog VHDL三种建模描述方式--2选1数据选择器 1,结构化描述方式: 是使用实例化低层次模块的方法,即调用其他已经定义过的低层次模块对整个电路的功能进行描 ...

  5. 实验二 数据选择器的设计与vivado集成开发环境【Verilog】

    实验二 数据选择器的设计与vivado集成开发环境[Verilog] 前言 实验二 数据选择器的设计与vivado集成开发环境 一.实验目的 二.实验环境 三.实验任务 四.实验原理 五.实验步骤 六 ...

  6. Verilog二选一数据选择器

    //二选一数据选择器module mux2_1(a0,a1,s,f) input a0,a1,s; output f;//默认是wire(线)变量 assign f=(s)?a1:a0;//assig ...

  7. fpga组合逻辑(4位比较器、8-3优先编码器、38译码器实现全减器、数据选择器实现逻辑函数等)

    目录 组合逻辑 VL11 4位数值比较器电路 VL12 4bit超前进位加法器电路 VL13 优先编码器电路① VL14 用优先编码器①实现键盘编码电路 VL15 优先编码器Ⅰ VL16 使用8线-3 ...

  8. EGO1—实现8选1的数据选择器74HC151

    数字设计 FPGA 应用,第三章组合逻辑设计和 VIVADO 进阶,课程设计性质的作业题1 第一题:构建工程,实现 8 选 1 的数据选择器 74HC151,编写仿真代码进行测试,将该工程并生成 IP ...

  9. EGO1—使用8选1数据选择器实现四输入逻辑函数 f=∑wxyz(1,3,6,7,11,13,14)

    数字设计 FPGA 应用,第三章组合逻辑设计和 VIVADO 进阶,课程设计性质的作业题2 第二题:再建一个工程,调用该 IP 核实现 4 输入逻辑函数f=∑wxyz(1,3,6,7,11,13,14 ...

最新文章

  1. 【PAT (Basic Level) 】1015 德才论 (25 分)
  2. 初中计算机实践研究计划,初中信息技术个人研修计划
  3. 《小学生C++趣味编程》第2课 春晓 动动脑 第1题-2018-12-12
  4. WIFI 网络操作--------------------笔记
  5. Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
  6. Unknown failure: Error: java.lang.IllegalStateException: No storage with enough free space; res=-1
  7. sql与ORACLE链接服务器相互访问方法
  8. 自动生成构造方法、getter、setter
  9. 常用的4种黑盒测试方法
  10. 【GDOI模拟】屏保
  11. dvhop三边测量法MATLAB,基于非测距的DV-Hop定位算法改进
  12. 四巨头键盘钢琴音源完整版-Spectrasonics Keyscape v1.1.3C WiN-MAC
  13. 21岁雅虎卖身引发一波怀旧 市值曾高达1250亿美元
  14. 选股服务器 主站没有响应,通达信软件运行缓慢的解决办法
  15. RGB图转为灰度图的方法
  16. angularjs2学习教程
  17. netty源码分析7-NioEventLoop-run方法疑难点
  18. 基于matlab的多路BPSK调制—为什么采样率=码元速率x一个码元周期内对码元的采样点数
  19. 计算机c盘空间满了应该怎么办,电脑c盘空间满了怎么办?教你12个方法解决电脑c盘空间不足的问题...
  20. lumberjack 实现按时间分割日志文件

热门文章

  1. 腾讯云星星海SA2云服务器配置规格功能测评,使用起来感受如何?
  2. javascript的箭头函数
  3. Unable to start activity ComponentInfo错误解决
  4. 聚焦社群本质,规避社群营销的九大雷区
  5. Pico 4 爆了,但没完全爆
  6. 关闭Windows 7系统的searchIndexer.exe
  7. 自定义颜色编辑选取对话框
  8. oracle logical standby,创建Oracle 11g logical standby
  9. HTML5和CSS3六CSS3三
  10. 尚硅谷_HTML5 核心 实战 笔记