微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 用Verilog的case语法做multiplexer出的问题

用Verilog的case语法做multiplexer出的问题

时间:10-02 整理:3721RD 点击:

用case语法,想做一个选择器, 16选1
wire [15:0]match;
wire [11:0]a;
wire [11:0]b[15:0];

always @(match)
    case(match)
    16'h0001:a=b[0];
    16'h0002:a=b[1];
    16'h0004:a=b[2];
    16'h0008:a=b[3];

    16'h0010:a=b[4];
    16'h0020:a=b[5];
    16'h0040:a=b[6];
    16'h0080:a=b[7];

    16'h0100:a=b[8];
    16'h0200:a=b[9];
    16'h0400:a=b[10];
    16'h0800:a=b[11];

    16'h1000:a=b[12];
    16'h2000:a=b[13];
    16'h4000:a=b[14];
    16'h8000:a=b[15];

    default:a=12'hxxx;
    endcase

simulator或者合成,都报错,但是不显示是什么错误!
是因为b被设置为数组的原因,不能用一个变量来做索引吗?
求助

你的always的敏感电平列表有问题

always @(match)有问题,应该改成 always @(position)否则无法触发always工作


哎呀,不好意思, 笔误,笔误, 应该是match,不是position, 已经修改了, 仍然有问题呢

a要定义为reg,b也 要定义为reg,不能是wire类型



    为什么b也要定义为reg型,不是只对赋值左边有要求吗?

三个问题:
1)敏感列表应该是always @(match or b)
2)a必须是reg型
3)b的定义方法需要verilog2005的支持,请检查工具是否支持。



   为什么a必须是reg型呢?



   1.a 必须是reg;b可以是wire   2. always@(match or b)
   Enjoy.


这是最基本的语法啊。
wire只能连线或者assign,不能放了always里赋值。

  1. module multiplex(match);
  2.         input [15:0]match;       
  3.         wire [11:0]b[15:0];       
  4.         reg [11:0]a;
  5.        
  6.         always @(match)
  7.                 case (match)
  8.                  16'h0001: a = b[0];
  9.                  16'h0002: a = b[1];
  10.                  16'h0004: a = b[2];
  11.                  16'h0008: a = b[3];
  12.                  
  13.                  16'h0010: a = b[4];
  14.                  16'h0020: a = b[5];
  15.                  16'h0040: a = b[6];
  16.                  16'h0080: a = b[7];
  17.                  
  18.                  16'h0100: a = b[8];
  19.                  16'h0200: a = b[9];
  20.                  16'h0400: a = b[10];
  21.                  16'h0800: a = b[11];

  22.                  16'h1000: a = b[12];
  23.                  16'h2000: a = b[13];
  24.                  16'h4000: a = b[14];
  25.                  16'h8000: a = b[15];
  26.                  
  27.                  default:  a = 12'hxxx;
  28.                 endcase

  29. endmodule

复制代码

我这个是可以综合通过的  仅供参考。


太二了, 写的时候弄错了,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top