打印

FPGA编程问题

[复制链接]
1895|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 | 只看该作者
原理是这样写的,但如果调整则不行,小心亚稳态的发生。这里牵涉到跨时钟域的问题。

使用特权

评论回复
5
sibaidong| | 2011-8-6 11:14 | 只看该作者
:dizzy:
忘看代码了,这个东西如果输出时钟没有要求的话,直接组合逻辑就搞定,还更好;否则,用IP核吧,简单又稳定。
这样做,没戏的!

使用特权

评论回复
6
xiaoyuan_ly| | 2011-8-7 21:36 | 只看该作者
还是代码看的少,编的少的缘故!!!

使用特权

评论回复
7
xiaoyuan_ly| | 2011-8-7 21:41 | 只看该作者
assign clkout0 = (flag == 值) ? clk0 : 1'b1;
  assign clkout1 = (flag == 值) ? clk1 : 1'b1;
  assgin clkout = clk0 & clk1;

  data数据同理,不知道这样可以伐?!

使用特权

评论回复
8
hbicecream|  楼主 | 2011-8-8 08:40 | 只看该作者
感谢以上回答,不过为什么不能?
assign clkout = (flag == 值) ? clk0 : clk1;

我是初学者,呵呵

使用特权

评论回复
9
lxc806705| | 2011-8-8 09:24 | 只看该作者
7楼是接上三态门来消除亚稳态么?
那你的第三句应该是
assign clkout = clkout0 & clkout1啊

使用特权

评论回复
10
denike| | 2011-8-9 11:47 | 只看该作者
想问7楼这样写和8楼的有什么区别?

使用特权

评论回复
11
lxc806705| | 2011-8-9 14:27 | 只看该作者
区别我说了啊,他综合成实际电路的时候多了一个三态门,这样用来消除亚稳态
但是我不确定他这样写是否有作用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

241

帖子

0

粉丝