搜索
bottom↓
回复: 3

vhdl时钟冲突问题

[复制链接]

出0入0汤圆

发表于 2013-9-17 14:29:13 | 显示全部楼层 |阅读模式
        library ieee;
        use ieee.std_logic_1164.all;
        use ieee.std_logic_unsigned.all;
        --use ieee.std_logic_signed.all;

        entity hardware_incident is

        generic(  Addr_type : integer:=16);
                         
        port(      Hard_cs  : in std_logic;
                          Hard_edge : in std_logic;
                          Hard_plus : in std_logic;   --bi jiao qiao out plus zhuangtai
                           R_W_ctrl : in std_logic;
                           AddrClk  : in std_logic;
                           AddrLine : inout std_logic_vector(0 to Addr_type-1));
        end hardware_incident;

        architecture beh of hardware_incident is
     signal   flag_num : integer;
         signal  flag_half : std_logic;       
         signal flow_write : std_logic;
         signal flow_read  : std_logic;
         signal RAddrClk   : std_logic;
         signal WAddrClk   : std_logic;
         signal  cenclk    : std_logic;
         signal RAddrLine  : std_logic_vector(0 to Addr_type - 1);
         signal WAddrLine  : std_logic_vector(0 to Addr_type - 1);
         signal wcenclk    : std_logic;
         signal rcenclk    : std_logic;
         signal wflag_num  : integer;
         signal rflag_num  : integer;
         
         BEGIN
   
         PROCESS(R_W_ctrl,AddrClk)
         BEGIN
         IF(R_W_ctrl = '0')then         
            WAddrClk <= AddrClk;
            wflag_num <= 0;
                IF(WAddrClk = '1' and AddrClk = '1' and flow_write = '1')THEN
                 cenclk <= WAddrClk ;
                 IF(cenclk = '1' and WAddrClk = '1')THEN        
                         wflag_num <= wflag_num + 1;       
                         WAddrLine <= WAddrLine + "0000000000000001";
                         AddrLine <= WAddrLine ;
                 END IF;
                 IF(wflag_num = 65536)THEN
                         wflag_num <= 0;
                         WAddrLine <= "0000000000000000";
                         AddrLine <= WAddrLine;
                 END IF;                         
                        IF(wflag_num = 32767 and Hard_cs = '1' and Hard_edge = '0')THEN               
                          wflag_num  <=  0 ;
                          flag_half <= '1';          
                          WAddrLine <= "0111111111111111";
                          AddrLine <= WAddrLine;          
                        END IF;

                        IF(wflag_num = 32767 and Hard_cs = '1' and Hard_edge = '1')THEN           --tiao jian ju bei
                          wflag_num  <=  0 ;
                          flag_half <= '1';          
                          WAddrLine <= "0111111111111111";       
                          AddrLine <= WAddrLine;
                        END IF;

                        IF(AddrClk'event and AddrClk='1' and flag_half = '1')THEN                --ying jian chu fa
                            wcenclk <= AddrClk ;
                            IF(wcenclk = '1'and AddrClk = '1' and Hard_plus = '1')THEN
                                wflag_num <= 0;
                                WAddrLine <= "0111111111111111";       
                                AddrLine <= WAddrLine;
                                END IF;
                        END IF;

                        IF(wflag_num = 32767 and flag_half = '1')THEN                 --write half ram
                                wflag_num  <= 0;
                                flag_half <= '0';
                                WAddrLine <= "0000000000000000";
                                AddrLine <= WAddrLine;
                                flow_read <= '1';                                        --read enable
                        END IF;
                END IF;
        END IF;
          
         IF(R_W_ctrl = '1')then                                              --read exeral enable
           RAddrClk <= AddrClk;
           rflag_num <= 0;
            IF(RAddrClk'event and RAddrClk = '1' and flow_read = '1')THEN    -- ji suan read plus ge shu
                                 cenclk <= RAddrClk;
                        IF(cenclk = '1' and AddrClk = '1')THEN                      --add yiji wending
                                 rflag_num <= rflag_num + 1;       
                                 rAddrLine <= RAddrLine + "0000000000000001";
                                 AddrLine <= RAddrLine ;
                        END IF;
                END IF;
            IF(rflag_num = 65536)THEN                                         --read plus yichu clear
                                 rflag_num <= 0;
                                 RAddrLine <= "0000000000000000";
                                 AddrLine <= RAddrLine;
                                 flow_write <= '1';
                END IF;               
          END IF;         
                   
  END PROCESS;
  END beh;

烦请高手分析

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-9-17 14:35:27 | 显示全部楼层
问题补充:    IF(RAddrClk'event and RAddrClk = '1' and flow_read = '1')THEN    -- ji suan read plus ge shu
error(10818)错误

出0入0汤圆

发表于 2013-9-18 11:43:39 来自手机 | 显示全部楼层
一个进程里只能有一个时钟,看一下硬件手册吧。触发器限制。多时钟拆了了,拆成多进程。

出0入4汤圆

发表于 2013-9-18 15:27:51 | 显示全部楼层
时钟语句里面又套了时钟语句, 显然是错误的. FPGA里是D触发器, 一个process只能有一个时钟.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表