如何使用 SystemVerilog 定义参数化多路复用器 [英] How to define a parameterized multiplexer using SystemVerilog

查看:61
本文介绍了如何使用 SystemVerilog 定义参数化多路复用器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个模块,根据一个热输入将 x 个输入数据包切换为单个输出数据包.

I am trying to create a module which switches x input data packets to a single output packet according to a one hot input.

如果 x 是一个固定值 4,我会创建一个 case 语句,

If x was a fixed value of 4, I would just create a case statement,

case (onehot)
  4'b0001  : o_data = i_data[0];
  4'b0010  : o_data = i_data[1];
  4'b0100  : o_data = i_data[2];
  4'b1000  : o_data = i_data[3];
  default  : o_data = 'z;
endcase

但是对于变量 x,我如何定义所有情况?

But with variable x, how do I define all cases?

谢谢.

推荐答案

parameter X = 4;  

input [X-1:0] onehot;
input i_data [X];
output reg o_data;

always_comb 
begin
   o_data = 'z;
   for(int i = 0; i < X; i++) begin
      if (onehot == (1 << i))
         o_data = i_data[i];
   end
end

这篇关于如何使用 SystemVerilog 定义参数化多路复用器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆