atom100 发表于 2014-10-20 16:15:01

verilog 多端口切换?下面这样可以吧?



assignb =signal1? a1 :8'hzzzz;
assignb =signal2? a2 :8'hzzzz;
...
assignb =signaln? an :8'hzzzz;

其中 a1 ...an 同一时刻 只有一个为 1
这样 实现总线切换 可以吧 ?
或有什么其他的好办法,求教

hell-prototypes 发表于 2014-10-20 16:27:04

为什么 不用 case 语句。。

zxq6 发表于 2014-10-20 17:15:22

case 才是解决的办法。

atom100 发表于 2014-10-20 17:36:13

本帖最后由 atom100 于 2014-10-20 17:45 编辑

哦,组合逻辑中用case语句 ?

但 case语句后不是一个 变量 啊?

atom100 发表于 2014-10-20 17:45:08

没说清楚,

assignb =sa1? a1 :8'hzzzz;
assignb =sa2? a2 :8'hzzzz;

assignb =sb1? a1 :8'hzzzz;
assignb =sb2? a2 :8'hzzzz;
... ...

assignb =sc1? a1 :8'hzzzz;
assignb =sc2? a2 :8'hzzzz;

其中 saa1saa2 ...san1 san2 同一时刻 只有一个为 1

sa1 sa2, sb1 sb2 , sc1 sc2来自不同的状态机
前面字母相同的 sa , sb或sc 来自同一个状态机,
如果用case 语句的话,case后面不是一个变量啊 ?

RUANJI 发表于 2014-10-20 17:47:35

zxq6 发表于 2014-10-20 17:15
case 才是解决的办法。

总觉得必须互斥才行。

软件不知道这些是互斥的。

atom100 发表于 2014-10-20 17:59:34

本帖最后由 atom100 于 2014-10-20 19:28 编辑

把 sa1 ,sa2, sb1 ,sb2 ,sc1 ,sc2 整合到一个变量里了reg bus_num,
reg b;
always @(*)
   case:
        4'h1:
          begin
              b =sa1 ;
              b =sa2 ;
          end

        4'h2:
          begin
              b =sb1 ;
              b =sb2 ;

          end

        4'h3:
           begin
              b =sc1 ;
              b =sc2 ;

          end   
   endcase
其中b 连接到 sram的数据总线上
这样写对吧 ?
另外,不同的信号 切换到 同一个总线b上的时候,是否会有波动 ?是否需要用一个 信号 进行 “与”一下,就是切换过程的时候,置为0;切换完后才置为1

wuqt 发表于 2014-10-28 11:10:34

atom100 发表于 2014-10-20 17:59
把 sa1 ,sa2, sb1 ,sb2 ,sc1 ,sc2 整合到一个变量里了reg bus_num,
reg b;
always @(*)


1.要把case 情况全部列出来;2. 切换过程中的数据肯定是不能用的,你要保证控制切换的信号和读取输出的信号是同步的就OK。

CMika 发表于 2014-10-28 14:56:00

case情况不列全就会生成latch   浪费逻辑资源
页: [1]
查看完整版本: verilog 多端口切换?下面这样可以吧?