📄 abc.txt
字号:
entity bc is
port(en1:in std_logic;
datain:in std_logic_vector(7 downto 0);
dataout:out std_logic_vector(7 downto 0));
end bc;
architecture des of bc is
signal a:std_logic_vector(7 downto 0);
begin
process(en1)
begin
if en1'event and en1='1' then
a<=datain;
else
a<=a;
end if;
end process;
dataout<=a;
end des;
%%-----------MIAOSD(并串变换)-------------------%%
use ieee.std_logic_1164.all;
entity miaosd is
port(clk:in std_logic;
a:in std_logic_vector(7 downto 0);
en0:out std_logic; ---------nWait信号
en1:out std_logic; --------控制进入MIAOSD处理部分的待处理信号
dataout:out std_logic ---------串行信号输出
);
end miaosd;
architecture des of miaosd is
begin
process(clk)
variable c:integer range 0 to 11;
begin
if clk'event and clk='1' then
if c=0 then
c:=c+1;dataout<=a(0);en0<='1';en1<='0';
elsif c=1 then
c:=c+1;dataout<=a(1);en0<='1';en1<='0';
elsif c=2 then
c:=c+1;dataout<=a(2);en0<='1';en1<='0';
elsif c=3 then
c:=c+1;dataout<=a(3);en0<='1';en1<='0';
elsif c=4 then
c:=c+1;dataout<=a(4);en0<='1';en1<='0';
elsif c=5 then
c:=c+1;dataout<=a(5);en0<='1';en1<='0';
elsif c=6 then
c:=c+1;dataout<=a(6);en0<='1';en1<='0';
elsif c=7 then
c:=8;dataout<=a(7);en0<='1';en1<='0';
elsif c=8 then
c:=9;dataout<='0';en0<='1';en1<='0';
elsif c=9 then
c:=10;dataout<='0';en0<='0';en1<='0';
elsif c=10 then
c:=11;dataout<='0';en0<='1';en1<='1';
elsif c=11 then
c:=0;dataout<='1';en0<='1';en1<='0';
else
dataout<='0';en0<='1';en1<='0';
end if;
end if;
end process;
end des;
%%------------------receiver1串并转换------------------------%%
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY receiver IS
PORT (clk : IN std_logic;
sdata : IN std_logic; ----串行输入信号
readn : out std_logic; ----控制PC机读取数据的信号
pdata : out std_logic_vector(7 downto 0) ----并行信号输出
);
END receiver;
ARCHITECTURE des OF receiver IS
signal mmid :std_logic;
signal midstate :std_logic;
signal midpdata :std_logic_vector(7 downto 0);
signal midcnt :std_logic_vector(3 downto 0);
signal middcnt :std_logic_vector(3 downto 0);
signal midscnt :std_logic_vector(3 downto 0);
signal midsdata :std_logic;
begin
A: process(clk) ------2分频
Begin
if(clk='1' and clk'event) then
mmid<=not mmid;
else
mmid<=mmid;
end if;
end process A;
B: process(mmid,sdata) -------串并处理部分
begin
if sdata='1' and midstate='1' then
midstate<='0';
midcnt<="0000";
readn<='1';
midpdata<="00000000";
midscnt<="0000";
else
if(mmid='1' and mmid'event) then
if midstate='0' then
if midcnt<"1011" then
if middcnt<="1000" then
middcnt<=middcnt+'1';
midscnt<=midscnt+sdata;
else
middcnt<="0000";
midcnt<=midcnt+'1';
if midcnt="1010" then
pdata<=midpdata;
end if;
if midscnt<"0111" then
midsdata<='0';
else
midsdata<='1';
end if;
if midcnt<="1001" then
midscnt<="0000";
midpdata<=midpdata(6 downto 0) & midsdata;
end if;
end if;
else
midcnt<="1111";
midstate<='1';
readn<='0';
end if;
end if;
end if;
end if;
end process B;
END des;
用CPLD产生等待时序
TMS320C2X支持与慢速外设接口的硬件等待状态插入。当与慢速外设接口时,系统必须提供能产生等待状态的硬件电路。外设存取的速度越慢,所需插入的等待状态数量就越多。那么,如何根据外设存取速度来确定所需的等待数可以由下式确定:
设t为外设访问时间
TMS32020 [200(N-1)+85]ns<ta<[200N+85]ns
TMS320C25-40 [100(N-1)+40]ns<ta<[100N+40]ns
TMS320C25-50 [80(N-1)+29]ns<ta<[80N+29]ns
假设设计的系统在访问程序空间时需要加入两个等待,I/O空间和数据空间则是全速。用VHDL语言描述如下:
-- generate wait state for low speed interface
g_wait_prog:
PROCESS (clockout, reset)
BEGIN
IF ((res_cpu = 0) or (ps = 1))THEN
progwaitclock <= 0;
ELSIF (clockoutEVENT AND clockout= 0) THEN
IF (ps = 0) THEN
IF progwaitclock = 2 THEN
progwaitclock <= 0;
ELSE
progwaitclock <= progwaitclock + 1;
END IF;
ELSE
progwaitclock <= progwaitclock ;
END IF;
END IF;
END PROCESS g_wait_prog;
-- generate ready signal
PROCESS
BEGIN
IF ((progwaitclock = 0)and(lcdwaitclock = 0)) THEN
ready <= 1;
ELSE
ready <= 0;
END IF;
END PROCESS ;
Clockout为CPU的时钟输出信号,信号量progwaitclock是用来计数clockout的个数,当CPU访问程序空间时,PS为低电平, progwaitclock开始计数,当progwaitclock的值不为0时ready为高,CPU等待外部设备就绪,当progwaitclock 计数到要等待的个数时,progwaitclock复位为零,ready变为低,CPU等待结束。
用CPLD实现存储器接口
存储器接口包括ROM接口和RAM接口两种。ROM主要指PROM和EPROM,而RAM主要是静态RAM(SRAM)。设计存储器接口时主要考虑到存储器速度,以确定需要插入几个等待状态,同时还要考虑到地址译码,地址空间分配的问题。
1 快速PROM/EPROM接口
快速PROM/EPROM(存取时间 35ns)可直接和TMS320C2××接口而不用加入等待,但要考虑到地址译码的问题。
2 慢速EPROM/EEPROM/FLASH MEMORY的接口
对于慢速器件,在和DSP这种较快的处理器接口的时候要加入合适的等待周期,同时还要考虑地址译码的问题。
3 快速SRAM接口
TMS320C2××既可将SRAM用作程序存储器,也可用作数据存储器。不管是程序空间还是数据空间,它都只要考虑译码的问题,用正确的线片选即可,如程序空间用PS片选,而数据空间用DS片选。
4 程序和数据公用SRAM
在很多时候,为了方便调试不但要扩展程序SRAM也要扩展数据SRAM。因为TMS320C2××分别用PS和DS来选程序和数据空间,所以一般的做法是用PS和DS分别片选不同的芯片,为了使DSP有足够的程序和地址空间,我们需要多片存储器芯片,这样,会给PCB布线的时候带来很大的麻烦。因为采用了 CPLD来进行译码,我们可以很方便的用一块容量较大的SRAM,通过合适的译码电路使它的空间能分开,既有程序空间又有数据空间。下以CY7C1024 -15为例来说明:
-- ram address allocation.
-- pro_data = 1 means select 8000H--ffffH(data);
-- pro_data = 0 means select 0000H--7fffH(program);
PROCESS (ds,ps)
BEGIN
IF((strb= 0)and(ds = 1)and(ps = 0)) THEN
pro_data <= 0;
ELSIF((strb= 0)and(ds = 0)and(ps = 1)) THEN
pro_data <= 1;
ELSE
pro_data <= 0;
END IF;
END PROCESS;
-- ram control line.
control:
PROCESS (we, w/r, ps, ds, ios, br, strb)
BEGIN
IF strb = 0 THEN
IF ((ds = 1)and(ps = 0))or((ds = 1)and(ps = 0)) THEN
ram_cs <= 0;
ram_w/r <= w/r;
ram_oe <= we;
ELSE
ram_cs <= 1;
ram_w/r <= 1;
ram_oe <= 1;
END IF;
ELSE
ram_cs <= 1;
ram_w/r <= 1;
ram_oe <= 1;
END IF;
CY7C1021是Cypress公司生产的64k×16bit Static RAM,以上程序要完成的功能是让一块芯片的64k空间中的低端32k为程序空间,另外32k为数据空间。程序中的pro_data接CY7C1021的最高位地址线A15,当ps为低时pro_data为低电平,选中RAM的低32k空间,当ds为低时pro_data为高电平,选中RAM的高32k空间,ram_cs、ram_w/r、ram_oe分别接CY7C1021的片选、读、写线。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -