![]() |
|
|
#1 |
|
实习会员
![]() 注册日期: 2010-04-06
帖子: 2
声望力: 0 ![]() |
1. 从UART IP核采集数据,存入双口RAM 2. 如果字符串尾三位为:E,N,D,则给DSP一个中断,DSP读走数据,在此期间CPLD继续向双口RAM地址从00111111111111起的存储空间存数据 我的程序已经编译通过,但是libero waveform仿真时无法操作,请各位大神看看程序是不是缺什么东西? 以下是我编写的程序: library IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Entity sjcja is -- Port list port( -- Inputs clka:in STD_logic; DATA_INa:IN STD_LOGIC_VECTOR(7 DOWNTO 0); C: OUT STD_LOGIC;---给DSP的中断信号 CEa: out STD_logic;---双口RAM使能 RWa: out std_logic;---双口RAM读写控制 rxrdy:in std_logic; ---UART IP核可读信号 DATA_OUTa: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);----给双口ram的数据信号 address: out std_logic_vector(13 downto 0);----给双口ram的地址信号 oena: out std_logic ); END sjcja; ARCHITECTURE compare of sjcja is signal add: std_logic_vector(13 downto 0):="00000000000000"; signal A: std_logic_vector(7 downto 0); signal numbera:integer:=0; signal STATE:character; Begin compare1 rocess(clka,rxrdy)BEGIN IF(CLKa'EVENT AND CLKa='1')THEN A<=data_ina; oena<='L'; IF (A="01000101")then STATE<='E'; CEa<='L'; RWa<='L'; DATA_outa<=A; add<=add+"00000000000001"; ELSIF(A="1001110" AND STATE='E')then STATE<='N'; CEa<='L'; RWa<='L'; DATA_outa<=A; add<=add+"00000000000001"; ELSIF(A= "01000100"AND STATE='N')then C<='1'; STATE<='B'; numbera<=numbera+1; if (numbera REM 2=0) then add<="00000000000000"; else add<="00111111111111"; end if; ELSE state<='B'; CEa<='L'; RWa<='L'; DATA_outa<=A; add<=add+"00000000000001"; END IF; end if; END PROCESS COMPARE1; end compare; |
|
|
|
|
|
#2 |
|
初级会员
![]() 注册日期: 2010-02-23
帖子: 15
声望力: 0 ![]() |
楼主用的是Actel器件吧。
没接触过,帮你顶起! 可以尝试把把'L'换成'0'试试。 另外 signal STATE:character; 换成自定义的状态。 个人看法,不一定行, 。
|
|
|
|
|
|
#3 |
|
实习会员
![]() 注册日期: 2010-04-06
帖子: 2
声望力: 0 ![]() |
谢谢
请问你使用过libero的UART IP核么? 现在主要问题是:打开waveform后,我定义的顶层端口信号没有一个被自动载入到waveform的,不知道为什么。 还有,我用的UART IP核要实现一个从rx这个端口(IP核的端口)采集串行数据的功能,是需要把rx设为top level么,仿真时数据怎么输入? |
|
|
|
|
|
#4 |
|
版主
![]() 注册日期: 2010-02-23
帖子: 39
声望力: 1 ![]() |
没有过 libero ,我们用的是altera的芯片,呵呵。
|
|
|
|