verilog 多端口切换?下面这样可以吧?
assignb =signal1? a1 :8'hzzzz;
assignb =signal2? a2 :8'hzzzz;
...
assignb =signaln? an :8'hzzzz;
其中 a1 ...an 同一时刻 只有一个为 1
这样 实现总线切换 可以吧 ?
或有什么其他的好办法,求教 为什么 不用 case 语句。。 case 才是解决的办法。 本帖最后由 atom100 于 2014-10-20 17:45 编辑
哦,组合逻辑中用case语句 ?
但 case语句后不是一个 变量 啊?
没说清楚,
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后面不是一个变量啊 ? zxq6 发表于 2014-10-20 17:15
case 才是解决的办法。
总觉得必须互斥才行。
软件不知道这些是互斥的。 本帖最后由 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
atom100 发表于 2014-10-20 17:59
把 sa1 ,sa2, sb1 ,sb2 ,sc1 ,sc2 整合到一个变量里了reg bus_num,
reg b;
always @(*)
1.要把case 情况全部列出来;2. 切换过程中的数据肯定是不能用的,你要保证控制切换的信号和读取输出的信号是同步的就OK。 case情况不列全就会生成latch 浪费逻辑资源
页:
[1]