Verilog数据选择器参数化设计
摘要: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数据选择器参数化设计相关推荐
- 【数字逻辑 Verilog】全面剖析数据选择器——从基础到拓展,从理论到设计的实现,从表面到本质
0 前言 0.1 使用环境 EDA工具:Vivado 2017.4 硬件描述语言:Verilog HDL 0.2 涉及知识 数字逻辑 Verilog 1 基础模块:一位四选一数据选择器 1.1 设计部 ...
- Quartus II使用说明(Verilog HDL二选一数据选择器 )
<可编程数字逻辑电路设计>课程中Quartus II软件的使用说明 VHDL和Verilog HDL不一样. 1.新建文件夹,里面包含5个子文件夹(doc/img/prj/rtl/test ...
- Verilog——74HC151八选一数据选择器并扩展为16选1数据选择器
Verilog--74HC151八选一数据选择器并扩展为16选1数据选择器 74HC151的仿真 设计思路 采用行为级建模,根据74HC151八选一数据选择器的功能表编程即可. 代码实现 设计模块 / ...
- Verilog VHDL三种建模描述方式——2选1数据选择器
标题Quartus II 标题 Verilog VHDL三种建模描述方式--2选1数据选择器 1,结构化描述方式: 是使用实例化低层次模块的方法,即调用其他已经定义过的低层次模块对整个电路的功能进行描 ...
- 实验二 数据选择器的设计与vivado集成开发环境【Verilog】
实验二 数据选择器的设计与vivado集成开发环境[Verilog] 前言 实验二 数据选择器的设计与vivado集成开发环境 一.实验目的 二.实验环境 三.实验任务 四.实验原理 五.实验步骤 六 ...
- Verilog二选一数据选择器
//二选一数据选择器module mux2_1(a0,a1,s,f) input a0,a1,s; output f;//默认是wire(线)变量 assign f=(s)?a1:a0;//assig ...
- fpga组合逻辑(4位比较器、8-3优先编码器、38译码器实现全减器、数据选择器实现逻辑函数等)
目录 组合逻辑 VL11 4位数值比较器电路 VL12 4bit超前进位加法器电路 VL13 优先编码器电路① VL14 用优先编码器①实现键盘编码电路 VL15 优先编码器Ⅰ VL16 使用8线-3 ...
- EGO1—实现8选1的数据选择器74HC151
数字设计 FPGA 应用,第三章组合逻辑设计和 VIVADO 进阶,课程设计性质的作业题1 第一题:构建工程,实现 8 选 1 的数据选择器 74HC151,编写仿真代码进行测试,将该工程并生成 IP ...
- 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 ...
最新文章
- 【PAT (Basic Level) 】1015 德才论 (25 分)
- 初中计算机实践研究计划,初中信息技术个人研修计划
- 《小学生C++趣味编程》第2课 春晓 动动脑 第1题-2018-12-12
- WIFI 网络操作--------------------笔记
- Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
- Unknown failure: Error: java.lang.IllegalStateException: No storage with enough free space; res=-1
- sql与ORACLE链接服务器相互访问方法
- 自动生成构造方法、getter、setter
- 常用的4种黑盒测试方法
- 【GDOI模拟】屏保
- dvhop三边测量法MATLAB,基于非测距的DV-Hop定位算法改进
- 四巨头键盘钢琴音源完整版-Spectrasonics Keyscape v1.1.3C WiN-MAC
- 21岁雅虎卖身引发一波怀旧 市值曾高达1250亿美元
- 选股服务器 主站没有响应,通达信软件运行缓慢的解决办法
- RGB图转为灰度图的方法
- angularjs2学习教程
- netty源码分析7-NioEventLoop-run方法疑难点
- 基于matlab的多路BPSK调制—为什么采样率=码元速率x一个码元周期内对码元的采样点数
- 计算机c盘空间满了应该怎么办,电脑c盘空间满了怎么办?教你12个方法解决电脑c盘空间不足的问题...
- lumberjack 实现按时间分割日志文件