FPGA编程问题

[复制链接]
2655|10
 楼主| hbicecream 发表于 2011-8-5 17:00 | 显示全部楼层 |阅读模式
本帖最后由 hbicecream 于 2011-8-5 17:15 编辑

有个模块,2组输入,每组输入一个时钟,8路数据,另一个信号输入flag
假定输入为clk0,[7:0]data0,clk1,[7:0]data1
输出1组,一个时钟,8路数据
假定输出clkout,[7:0]dataout
根据管脚状态flag决定,clkout连clk0还是clk1,同样根据管脚状态flag决定,dataout连data0还是data1
用verilog应该如何实现?
 楼主| hbicecream 发表于 2011-8-5 17:02 | 显示全部楼层
本帖最后由 hbicecream 于 2011-8-5 17:06 编辑

clk0和clk1不同频,不同相

我自己写了一个发现问题挺大

always @(flag or clk0 or clk1)
begin
  if (flag)
   begin
   clkout <= clk0;
   dataout <= data0;
   end
  else
   begin
   clkout <= clk1;
   dataout  <= data1;
   end
end
 楼主| hbicecream 发表于 2011-8-5 17:08 | 显示全部楼层
本帖最后由 hbicecream 于 2011-8-5 17:17 编辑

本意就是希望它们能像切换继电器一样切换

注意,时钟也是选择输出的
sibaidong 发表于 2011-8-6 11:10 | 显示全部楼层
原理是这样写的,但如果调整则不行,小心亚稳态的发生。这里牵涉到跨时钟域的问题。
sibaidong 发表于 2011-8-6 11:14 | 显示全部楼层
:dizzy:
忘看代码了,这个东西如果输出时钟没有要求的话,直接组合逻辑就搞定,还更好;否则,用IP核吧,简单又稳定。
这样做,没戏的!
xiaoyuan_ly 发表于 2011-8-7 21:36 | 显示全部楼层
还是代码看的少,编的少的缘故!!!
xiaoyuan_ly 发表于 2011-8-7 21:41 | 显示全部楼层
assign clkout0 = (flag == 值) ? clk0 : 1'b1;
  assign clkout1 = (flag == 值) ? clk1 : 1'b1;
  assgin clkout = clk0 & clk1;

  data数据同理,不知道这样可以伐?!
 楼主| hbicecream 发表于 2011-8-8 08:40 | 显示全部楼层
感谢以上回答,不过为什么不能?
assign clkout = (flag == 值) ? clk0 : clk1;

我是初学者,呵呵
lxc806705 发表于 2011-8-8 09:24 | 显示全部楼层
7楼是接上三态门来消除亚稳态么?
那你的第三句应该是
assign clkout = clkout0 & clkout1啊
denike 发表于 2011-8-9 11:47 | 显示全部楼层
想问7楼这样写和8楼的有什么区别?
lxc806705 发表于 2011-8-9 14:27 | 显示全部楼层
区别我说了啊,他综合成实际电路的时候多了一个三态门,这样用来消除亚稳态
但是我不确定他这样写是否有作用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

241

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部