打印

看到一个帖子,大伙看看说的有没有道理?

[复制链接]
1094|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlgcumt|  楼主 | 2012-12-10 20:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CPU与FPGA的最简单接口就是总线,通常总线包括有:地址总线,数据总线,读控制信号,写控制信号,以及片选信号。
   在做设计的过程中,看到不少同事在实现FPGA寄存器的过程中,代码显得很混乱。以下是本人的小小经验,抛砖引玉!!

   通常地址译码以及读写控制信号生成:

   aReg <= '1' when Addr=Reg_addr else '0';

   rdReg <= (not rd_n) and wr_n and aReg and (not cs_n);

   wrReg <= (not wr_n) and rd_n and aReg and (not cs_n);

   读寄存器,采取异步读的办法,这个好处就是响应快,而且读不会改写寄存器,不会引起颠覆性错误,因此是不用担心毛刺:

   Data <= Reg when rdReg='1' else (others=>'Z');

   写寄存器就建议采用同步电路,因为出现写控制信号出现毛刺会引起非法改写FPGA片内寄存器,这是很危险的:

   Write_Register:process(clk,rst_n)

   begin

        if rst_n='0' then

            Reg <= (others=>'0');

        elsif rising_edge(clk) then

            if wrReg='1' then

                  Reg <= Data;

            end if;

        end if;

   end process;

以上是采用VHDL编写,当然也是很容易转换成用Verilog描述,这个就留给各位来做了!!

相关帖子

沙发
jlgcumt|  楼主 | 2012-12-10 20:58 | 只看该作者
就是第2部分,我一直用异步来读写,也没发现什么问题?

使用特权

评论回复
板凳
GoldSunMonkey| | 2012-12-10 21:41 | 只看该作者
jlgcumt 发表于 2012-12-10 20:58
就是第2部分,我一直用异步来读写,也没发现什么问题?

可能没有问题,但是要有问题的时候,问题自然就出来了。

使用特权

评论回复
地板
jlgcumt|  楼主 | 2012-12-11 15:18 | 只看该作者
GoldSunMonkey 发表于 2012-12-10 21:41
可能没有问题,但是要有问题的时候,问题自然就出来了。

我在网上查了一下,将异步的逻辑信号变为同步信号会减少竞争与冒险的现象,减少毛刺,但不能完全消除,我问一下你们平时是怎么做的?

使用特权

评论回复
5
anvy178| | 2012-12-11 16:47 | 只看该作者
加多一级 触发器?

使用特权

评论回复
6
GoldSunMonkey| | 2012-12-11 20:57 | 只看该作者
jlgcumt 发表于 2012-12-11 15:18
我在网上查了一下,将异步的逻辑信号变为同步信号会减少竞争与冒险的现象,减少毛刺,但不能完全消除,我 ...

不同情况有不同的做法。

使用特权

评论回复
7
GoldSunMonkey| | 2012-12-11 20:58 | 只看该作者
anvy178 发表于 2012-12-11 16:47
加多一级 触发器?

有时候这个可以

使用特权

评论回复
8
anvy178| | 2012-12-11 22:57 | 只看该作者
根据原理 布尔消项

使用特权

评论回复
9
GoldSunMonkey| | 2012-12-12 21:02 | 只看该作者
:)

使用特权

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

本版积分规则

个人签名:善攻者,动于九天之上,善守者,藏于九地之下!

183

主题

733

帖子

4

粉丝