|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
CPLD 與51接口 急請(qǐng)教各位大俠!。。! |
| 作者:wujianbo 欄目:EDA技術(shù) |
這段代碼老是告訴我TRI or opndrn buffer : can ONLY drive LOGIC if connected to a BIDIR pin,錯(cuò)在哪兒,怎么改阿?? LIBRARY ieee; USE ieee.std_LOGIC_1164.ALL; ENTITY mcu_interface IS PORT( ncs,rs: IN std_LOGIC; --地址線信號(hào) wr,rd: IN std_LOGIC; --讀寫信號(hào) p0: INOUT std_LOGIC_vector(7 downto 0); --數(shù)據(jù)總線 reg_ins: out std_LOGIC_vector(7 downto 0); --指令積存器 reg_data: out std_LOGIC_vector(7 downto 0); --數(shù)據(jù)寄存器 rd_data: IN std_LOGIC_vector(7 downto 0)); END ENTITY mcu_interface; ARCHITECTURE mcubus of mcu_interface IS signal din,dout: std_LOGIC_vector(7 downto 0); signal wr_new: std_LOGIC; signal reg_ins_buf,reg_data_buf:std_LOGIC_vector(7 downto 0); begin din <= p0 when wr = '1' else --wr通過(guò)一反向器接入 (others=>'Z'); PROCESS(wr,ncs,rs) begin if wr'event and wr = '0' then --下降沿鎖存數(shù)據(jù) if ncs = '0' and rs = '0' then reg_ins_buf <= din; reg_data_buf <= "ZZZZZZZZ"; elsif ncs = '0' and rs = '1' then reg_ins_buf <= "ZZZZZZZZ"; reg_data_buf <= din; else reg_ins_buf <= "ZZZZZZZZ"; reg_data_buf <= "ZZZZZZZZ"; end if; end if; end PROCESS; PROCESS(rd,ncs) begin if rd'event and rd = '0' then if ncs = '0' then dout <= rd_data; else dout <= "ZZZZZZZZ"; end if; end if; end PROCESS; reg_ins <= reg_ins_buf; reg_data <= reg_data_buf; p0 <= dout when (wr='0' and ncs = '1') else (others=>'Z'); end mcubus; |
| 2樓: | >>參與討論 |
| 作者: oaipoaip 于 2005/11/29 9:37:00 發(fā)布:
必須是bidir引腳才可以輸出高阻 reg_ins_buf和reg_data_buf不能置為高阻 |
|
| 3樓: | >>參與討論 |
| 作者: wujianbo 于 2005/11/29 20:19:00 發(fā)布:
高手:CPLD 51接口繼續(xù)請(qǐng)教 改成如下了 可是老是有競(jìng)爭(zhēng),是在ncs = 1時(shí),為什么阿 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY mcu_interface IS PORT( ncs,rs: IN std_logic; --地址線信號(hào) wr,rd: IN std_logic; --讀寫信號(hào) p0: INOUT std_logic_vector(7 downto 0); --數(shù)據(jù)總線 reg_ins: out std_logic_vector(7 downto 0); --指令積存器 reg_data: out std_logic_vector(7 downto 0); --數(shù)據(jù)寄存器 rd_data: IN std_logic_vector(7 downto 0)); END ENTITY mcu_interface; ARCHITECTURE mcubus of mcu_interface IS signal din,dout: std_logic_vector(7 downto 0); signal reg_ins_buf,reg_data_buf:std_logic_vector(7 downto 0); begin din <= p0; PROCESS(wr,ncs,rs) begin if wr'event and wr = '0' then --下降沿鎖存數(shù)據(jù) if ncs = '0' and rs = '0' then reg_ins_buf <= din; elsif ncs = '0' and rs = '1' then reg_data_buf <= din; else null; end if; end if; end PROCESS; PROCESS(rd,ncs) begin if rd'event and rd = '0' then dout <= rd_data; end if; end PROCESS; reg_ins <= reg_ins_buf when ncs = '0' and rs = '0' and wr = '0'else (others=>'0'); reg_data <= reg_data_buf when ncs = '0' and rs = '0' and wr = '0' else (others=>'0'); p0 <= dout; end mcubus; |
|
| 4樓: | >>參與討論 |
| 作者: oaipoaip 于 2005/11/30 9:02:00 發(fā)布:
inout端口只有在輸出置為高阻時(shí)才能讀入數(shù)據(jù) 你可以寫個(gè)簡(jiǎn)單一點(diǎn)的程序,先把雙向端口的描述方法搞清楚再加入更多的功能。 舉個(gè)簡(jiǎn)單的例子給你參考一下,我沒(méi)有編譯過(guò),不保證沒(méi)有錯(cuò)誤,不過(guò)大概的控制方法差不多就是這樣。 entity mcu_interface is PORT( chipselect:in std_logic; read:in std_logic; write:in std_logic; data:inout std_logic_vector(7 downto 0); din:in std_logic_vector(7 downto 0); dout:out std_logic_vector(7 downto 0) ); end mcu_interface; architecture mcubus of mcu_interface is begin PROCESS(chipselect,read,write) begin if chipselect='1' and read='1' then --輸出數(shù)據(jù) data<=din; elsif chipselect='1' and write='1' then --輸入數(shù)據(jù) data<="ZZZZZZZZ"; dout<=data; else --總線隔離(高阻) data<="ZZZZZZZZ"; end if; end PROCESS end mcubus; |
|
| 5樓: | >>參與討論 |
| 作者: wujianbo 于 2005/11/30 10:13:00 發(fā)布:
總算弄出了一個(gè)差不多的程序,謝謝oaipoaip 參考了一篇文章FPGA-51接口的,網(wǎng)上找的,可是現(xiàn)在有一個(gè)問(wèn)題,當(dāng)單片機(jī)讀數(shù)據(jù)時(shí),我們一般是去讀寄存器的值,既然是寄存器,必然需要一個(gè)鎖存信號(hào),下面程序中用的鎖存信號(hào)是latch1:in std_logic,如果我是讀外部SRAM(也和CPLD做接口),這好像與讀SRAM的讀信號(hào)有關(guān)系了,一團(tuán)糟,想不明白了,先做SRAM接口把,有明白的人指點(diǎn)一下,oaipoaip好像很厲害,總能看出問(wèn)題。 library IEEE; use IEEE.STD_LOGIC_1164.all; entity mcu_interface is PORT( p0:inout std_logic_vector(7 downto 0); addr:in std_logic_vector(1 downto 0); RD,WR:in std_logic; --ALE:in std_logic; ready:in std_logic; datain:in std_logic_vector(7 downto 0); latch1:in std_logic; dataout1:out std_logic_vector(7 downto 0); dataout2:out std_logic_vector(7 downto 0)); end mcu_interface; architecture interface of mcu_interface is signal latch_ins:std_logic_vector(7 downto 0); signal latch_data:std_logic_vector(7 downto 0); signal latch_in:std_logic_vector(7 downto 0); signal wr_ins_enable:std_logic; signal wr_data_enable:std_logic; begin PROCESS(addr) begin if (addr="00") then wr_ins_enable<=WR; else wr_ins_enable<='1'; end if; end PROCESS; PROCESS(wr_ins_enable) begin if wr_ins_enable'event and wr_ins_enable='1' then latch_ins<=p0; end if; end PROCESS; PROCESS(addr) begin if (addr="01") then wr_data_enable<=WR; else wr_data_enable<='1'; end if; end PROCESS; PROCESS(wr_data_enable) begin if wr_data_enable'event and wr_data_enable='1' then latch_data<=p0; end if; end PROCESS; PROCESS(addr(1),ready,RD) begin if (addr(1)='0') and (ready='1') and (RD='0')then p0<=latch_in; else p0<="ZZZZZZZZ"; end if; end PROCESS; PROCESS(latch1) begin if latch1'event and latch1='1' then latch_in<=datain; end if; end PROCESS; dataout1<=latch_ins; dataout2<=latch_data; end interface; |
|
| 6樓: | >>參與討論 |
| 作者: oaipoaip 于 2005/11/30 10:51:00 發(fā)布:
你的問(wèn)題描述得不太清楚 如果你知道怎么用單片機(jī)控制SRAM的話,可以按照類似SRAM的時(shí)序做FPGA的接口時(shí)序,然后把SRAM和FPGA都掛在總線上就可以了,不知道你的問(wèn)題是不是這樣。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |