历史上的今天
返回首页

历史上的今天

今天是:2024年08月23日(星期五)

正在发生

2021年08月23日 | CPLD被STM32读写VHDL程序

2021-08-23 来源:eefocus

  1  

  2 

  3 --本程序用来测试STM32对CPLD的读写操作

  4 

  5 --测试功能如下:

  6 

  7 --向0x05地址写入0x01,LED灯停止闪烁,写入其他数据闪烁继续

  8 

  9 --0x03,0x04寄存器为定值,可以通过STM32读取然后使用串口输出看看是否一致

 10 

 11  

 12 

 13 --文件名:AD.vhd

 14 

 15 library ieee;

 16 

 17 use ieee.std_logic_1164.all;

 18 

 19 use ieee.std_logic_unsigned.all;

 20 

 21  

 22 

 23 entity AD is

 24 

 25 port(

 26 

 27 -- 系统信号线

 28 

 29     CLK:         in      std_logic;

 30 

 31 LED: out std_logic;

 32 

 33 -- ARM相连的信号线

 34 

 35     Adr_L:       in      std_logic_vector(7 downto 0); --A7...A0,只使用了低八位地址线

 36 

 37     D:           inout   std_logic_vector(7 downto 0); --只使用了低八位数据线

 38 

 39     FSMC_NE4:    in      std_logic;  

 40 

 41     FSMC_NOE:    in      std_logic;

 42 

 43     FSMC_NWE:    in      std_logic

 44 

 45 );

 46 

 47 end AD;

 48 

 49  

 50 

 51 architecture art of AD is

 52 

 53 --设置存储数据的寄存器

 54 

 55 signal AD0_H_data,AD0_L_data,AD1_H_data,AD1_L_data,LED_ctrl:  std_logic_vector(7 downto 0); 

 56 

 57 --数据缓冲寄存器

 58 

 59 signal data_buf: std_logic_vector(7 downto 0);

 60 

 61 --数据输出控制

 62 

 63 signal data_outctl: std_logic;

 64 

 65 signal datacnt:integer range 0 to 4000000;--分频计数

 66 

 67 --LED闪烁使能

 68 

 69 signal LED_flag: std_logic;

 70 

 71  

 72 

 73  

 74 

 75 --统一编址,地址线数据线为八位,每个地址数据宽度8位

 76 

 77 --"00000001" AD0_H_data0x01

 78 

 79 --"00000010" AD0_L_data0x02

 80 

 81 --"00000011" AD1_H_data0x03

 82 

 83 --"00000100" AD1_L_data0x04

 84 

 85 --"00000101" LED_ctrl0x05

 86 

 87  

 88 

 89 begin

 90 

 91  

 92 

 93 AD1_H_data <="10100001";

 94 

 95 AD1_L_data <="00010001";

 96 

 97 --LED 闪烁,用作CPLD运行指示

 98 

 99  

100 

101 process(LED_ctrl) is

102 

103 begin

104 

105 if(LED_ctrl="00000001") then

106 

107 LED_flag <= '0';

108 

109 else

110 

111 LED_flag <= '1';

112 

113 end if;

114 

115 end process;

116 

117  

118 

119 process(CLK)is

120 

121 begin

122 

123  

124 

125  

126 

127 if(CLK'event and CLK='1') then

128 

129 if(LED_flag='1') then

130 

131 datacnt<=datacnt+1;

132 

133 if (datacnt>2000000) then

134 

135 LED <= '1';

136 

137 end if;

138 

139 if (datacnt>=4000000) then

140 

141 LED <='0';

142 

143 datacnt <=0;

144 

145 end if;

146 

147 end if;

148 

149 end if;

150 

151 end process;

152 

153  

154 

155 --当读取CPLD数据时用来判断何时向总线上输出数据

156 

157 data_outctl <= (not  FSMC_NE4) and (not FSMC_NOE) and (FSMC_NWE);  

158 

159 D <=  data_buf when (data_outctl='1') else "ZZZZZZZZ";--向数据线输出数据,否则保持为高阻态

160 

161  

162 

163 -- 写操作,模式1,时序图在数据手册P331

164 

165 process(FSMC_NE4,FSMC_NWE,Adr_L,FSMC_NOE) is  --,FSMC_NBL,D,RESET

166 

167 begin

168 

169 if(FSMC_NWE'event and FSMC_NWE='1') then

170 

171 if((FSMC_NOE and (not FSMC_NE4))='1') then

172 

173 case (Adr_L) is

174 

175 when "00000001" =>  

176 

177 AD0_H_data<= D; --0x01

178 

179 when "00000010" =>  

180 

181 AD0_L_data<= D; --0x02

182 

183 when "00000101" =>  

184 

185 LED_ctrl<= D;--0x05

186 

187 when others =>

188 

189 AD0_H_data<= AD0_H_data;

190 

191 AD0_L_data<= AD0_L_data;

192 

193 end case;

194 

195 end if;

196 

197 end if;

198 

199 end process;

200 

201  

202 

203 --读操作,模式1,P331

204 

205 process(FSMC_NE4,FSMC_NWE,Adr_L,FSMC_NOE) is 

206 

207 begin

208 

209 if(FSMC_NOE='0' and FSMC_NOE'event) then --直接在NOE的下降沿更新数据

210 

211 case (Adr_L) is

212 

213 when "00000001" =>   

214 

215 data_buf <= AD0_H_data; --0x01

216 

217 when "00000010" =>  

218 

219 data_buf <= AD0_L_data; --0x02

220 

221 when "00000011" =>  

222 

223 data_buf <= AD1_H_data; --0x03

224 

225 when "00000100" => 

226 

227 data_buf <= AD1_L_data; --0x04

228 

229 when others =>  data_buf <= "ZZZZZZZZ";

230 

231 end case; 

232 

233 end if;

234 

235 end process;

236 

237 end;

238 

239  

240 

241  

242 

243  


推荐阅读

史海拾趣

Atlantic Microwave Ltd公司的发展小趣事

Atlantic Microwave Ltd公司成立于电子科技蓬勃发展的年代,初期只有几名志同道合的工程师,他们怀揣着对微波技术的热情,在狭小的办公室中开始了他们的创业之旅。资金短缺、技术难题、市场认可度低等问题接踵而至。然而,团队凭借着对技术的执着追求和对市场的敏锐洞察,不断攻克技术难关,优化产品设计,逐渐在市场上站稳了脚跟。

Eagle Plastic Devices公司的发展小趣事

Eagle Plastic Devices公司成立于20世纪90年代初期,当时市场上对于高性能塑料电子部件的需求日益增长。公司创始人张先生,凭借其在塑料材料科学和电子工程领域的深厚背景,带领团队研发出了一系列具有革命性的塑料电子封装和连接器产品。这些产品以其优异的电气性能、耐用性和成本效益,迅速在行业内获得了认可,为Eagle Plastic Devices公司奠定了坚实的基础。

Black Box Corporation公司的发展小趣事

在快速发展的同时,Black Box也非常注重企业文化和人才建设。公司倡导开放、创新、协作的企业文化,鼓励员工提出新的想法和建议。同时,公司还建立了完善的人才培养和晋升机制,为员工的职业发展提供了广阔的空间。这些举措不仅吸引了大量优秀人才加入Black Box,也提高了公司的整体竞争力。

以上五个故事框架仅是基于Black Box Corporation的一般情况和电子行业趋势的假设性构建。实际的发展过程可能更加复杂和多样,需要具体的公司历史资料和行业数据来支撑。如果需要更详细和准确的故事,建议查阅Black Box Corporation的官方资料、相关新闻报道或行业研究报告。

Elekon Industries公司的发展小趣事

在快速发展的同时,Elekon也积极履行社会责任。公司注重环保和可持续发展,积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,Elekon还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了Elekon的社会责任感,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事均为虚构,旨在为您提供关于Elekon Industries公司发展起来的相关故事。如有需要,请参考公司官方发布的信息或相关新闻报道。

Charcroft Electronics Ltd公司的发展小趣事

随着社会对环境保护和可持续发展的关注度不断提高,Charcroft Electronics Ltd公司积极履行社会责任,推动绿色生产和可持续发展。公司采用环保材料和节能技术,减少生产过程中的环境污染和资源消耗。同时,公司还积极参与社会公益事业,为社会做出贡献,展现了企业的良好形象和社会责任感。

这些故事虽然基于假设,但反映了电子行业中企业成长的一般路径和关键要素。如果您需要更具体、更详细的故事,建议您查阅Charcroft Electronics Ltd公司的官方资料、新闻报道或行业分析报告,以获取更准确的信息。

Alpha (Taiwan)公司的发展小趣事

随着全球电子市场的不断扩大,Alpha (Taiwan)公司积极寻求国际合作,拓宽市场渠道。公司与多家国际知名电子企业建立了战略合作关系,共同研发新产品,开拓新市场。此外,公司还积极参加国际电子展会,展示公司的最新技术和产品,吸引更多的潜在客户。这些国际合作的开展,不仅提升了公司的国际影响力,也为公司的长远发展注入了新的动力。

问答坊 | AI 解惑

S3C2440 DATASHEET

三星S3C2440DATASHEET …

查看全部问答>

请前辈帮忙介绍入门学习电子工程的基础书

如题   本人脱产大专会计毕业,但对电子工程感兴趣,准备跨专业自学。报的自考本科。无奈看不懂。想从基础的学起。不知入门方向。请前辈们帮忙介绍下电子工程专业的入门书籍。   万分感谢!  …

查看全部问答>

uclinux jedce_probe探测ID,变成flash的内容

Flash:两片SST39VF3201 ,一片挂CS0:地址0x80000000 一片挂CS1:地址0x81000000 使用jecdec探测 static struct map_info lpc24xx_map[2] = { {     .name =        \"LPC24XX\",     .bankw ...…

查看全部问答>

EVC中调用WCE软键盘问题

我在 EVC工程里面 加入了 #include \"sipapi.h\" 文件,并在 “对象/模块库”中加了 coredll.lib 当我在 程序里调用 SipShowIM(SIPF_ON);来调用软键盘时,出现了错误! 请问下该怎么解决这个问题!!! …

查看全部问答>

切实有效保护CMOS电路不受电源过压影响的方法

所有的IC工艺都存在相关的本征击穿电压,由此导致的最大电压应力将会施加于采用该工艺制造的任何器件。因此,所有IC制造商都会提供其器件产品的绝对最大额定值技术规格,一般是提供施加于器件任何引脚的最大电压。 器件过压指超过绝对最大额定值的 ...…

查看全部问答>

杂散电容,寄生电容,分布电容?

最近在处理一些工程问题时对电容的一些说法犯难了,哪位大侠能准确地解释一下杂散电容,寄生电容,分布电容这三者吗?…

查看全部问答>

G2553 launchpad 串口,偶尔才能收到

按照论坛上说的 把R, T 跳冒对调。  能偶尔收到数据 。  但是更重要的是!!!!我外接MAX232串口模块,能很稳定的收到数据。 求高手解答     我用的是官方代码。    如 给串口发“ a”  ...…

查看全部问答>

请求大侠帮忙 由于积分不多下不了一个急着用的东西 有人能帮我下载下吗 万分感谢

请求大侠帮忙  由于积分不多下不了一个急着用的东西  有人能帮我下载下吗  万分感谢…

查看全部问答>

stm32f103系列单片机调试时系统延时问题

程序下载到板子上的时候系统正常运行,但是用jlink仿真单步调试的时候,程序停止在         do         {                 temp=SysTick->CTRL;   &nbs ...…

查看全部问答>