问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在FPGA内部做一个1k大小的存储器,串口首先通过计算机将1k数据送给FPGA,然后,FPGA再通过串口送给计算机

发布网友 发布时间:2022-05-10 19:41

我来回答

4个回答

热心网友 时间:2023-10-25 12:53

,供你参考吧。
1. 顶层程序与仿真
(1)顶层程序
--文件名:top.vhd。
--功能:顶层映射。
--最后修改日期:2004.3.24。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity top is
Port (clk32mhz,reset,rxd,xmit_cmd_p_in:in std_logic; --总的输入输出信号的定义
rec_ready,txd_out,txd_done_out:out std_logic;
txdbuf_in:in std_logic_vector(7 downto 0); --待发送数据输入
rec_buf:out std_logic_vector(7 downto 0)); --接收数据缓冲
end top;
architecture Behavioral of top is

component reciever
Port (bclkr,resetr,rxdr:in std_logic;
r_ready:out std_logic;
rbuf:out std_logic_vector(7 downto 0));
end component;

component transfer
Port (bclkt,resett,xmit_cmd_p:in std_logic;
txdbuf:in std_logic_vector(7 downto 0);
txd:out std_logic;
txd_done:out std_logic);
end component;

component baud
Port (clk,resetb:in std_logic;
bclk:out std_logic);
end component;

signal b:std_logic;
begin
u1:baud port map(clk=>clk32mhz,resetb=>reset,bclk=>b); --顶层映射
u2:reciever port map(bclkr=>b,resetr=>reset,rxdr=>rxd,r_ready=>rec_ready,
rbuf=>rec_buf);
u3:transfer port map(bclkt=>b,resett=>reset,xmit_cmd_p=>xmit_cmd_p_in,
txdbuf=>txdbuf_in,txd=>txd_out,txd_done=>txd_done_out);
end Behavioral;
(2)程序仿真
仿真波形图如图8.8.5所示。

图8.8.5 仿真波形
2. 波特率发生器程序与仿真
(1)波特率发生器VHDL程序
--文件名:baud.vhd.
--功能:将外部输入的32MHz的信号分成频率为153600Hz的信号。
--最后修改日期:2004.3.24。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity baud is
Port (clk,resetb:in std_logic;
bclk:out std_logic);
end baud;
architecture Behavioral of baud is
begin
process(clk,resetb)
variable cnt:integer;
begin
if resetb='1' then cnt:=0; bclk<='0'; --复位
elsif rising_edge(clk) then
if cnt>=208 then cnt:=0; bclk<='1'; --设置分频系数
else cnt:=cnt+1; bclk<='0';
end if;
end if;
end process;
end Behavioral;
(2)程序仿真
仿真波形如图8.8.6所示。

图8.8.6 波特率发生器的仿真波形
3. UART发送器程序与仿真
(1)UART发送器VHDL程序
--文件名:transfer.vhd。
--功能:UART发送器。
--说明:系统由五个状态(x_idle,x_start,x_wait,x_shift,x_stop)和一个进程构成。
--最后修改日期:2004.3.24。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity transfer is
generic(framlent:integer:=8);
Port (bclkt,resett,xmit_cmd_p:in std_logic; --定义输入输出信号
txdbuf:in std_logic_vector(7 downto 0):="11001010";
txd:out std_logic;
txd_done:out std_logic);
end transfer;
architecture Behavioral of transfer is
type states is (x_idle,x_start,x_wait,x_shift,x_stop); --定义个子状态
signal state:states:=x_idle;
signal tcnt:integer:=0;
begin
process(bclkt,resett,xmit_cmd_p,txdbuf) --主控时序、组合进程
variable xcnt16:std_logic_vector(4 downto 0):="00000"; --定义中间变量
variable xbitcnt:integer:=0;
variable txds:std_logic;
begin
if resett='1' then state<=x_idle; txd_done<='0'; txds:='1'; --复位
elsif rising_edge(bclkt) then
case state is
when x_idle=> --状态1,等待数据帧发送命令
if xmit_cmd_p='1' then state<=x_start; txd_done<='0';
else state<=x_idle;
end if;
when x_start=> --状态2,发送信号至起始位
if xcnt16>="01111" then state<=x_wait; xcnt16:="00000";
else xcnt16:=xcnt16+1; txds:='0'; state<=x_start;
end if;
when x_wait=> --状态3,等待状态
if xcnt16>="01110" then
if xbitcnt=framlent then state<=x_stop; xbitcnt:=0;
else state<=x_shift;
end if;
xcnt16:="00000";
else xcnt16:=xcnt16+1; state<=x_wait;
end if;
when x_shift=>txds:=txdbuf(xbitcnt); xbitcnt:=xbitcnt+1; state<=x_wait; --状态4,将待发数据进行并串转换
when x_stop=> --状态5,停止位发送状态
if xcnt16>="01111" then
if xmit_cmd_p='0' then state<=x_idle; xcnt16:="00000";
else xcnt16:=xcnt16; state<=x_stop;
end if; txd_done<='1';
else xcnt16:=xcnt16+1; txds:='1'; state<=x_stop;
end if;
when others=>state<=x_idle;
end case;
end if;
txd<=txds;
end process;
end Behavioral;
UART发送器的仿真波形如图8.8.7所示。

图8.8.7 UART发送器的仿真波形
4. UART接收器程序与仿真
(1)UART接收器VHDL程序
--文件名:reciever.vhd。
--功能:UART接受器。
--说明:系统由五个状态(r_start,r_center,r_wait,r_sample,r_stop)和两个进程构成
--最后修改日期:2004.3.24。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity reciever is
generic(framlenr:integer:=8);
Port (bclkr,resetr,rxdr:in std_logic; --定义输入输出信号
r_ready:out std_logic;
rbuf:out std_logic_vector(7 downto 0));
end reciever;
architecture Behavioral of reciever is
type states is (r_start,r_center,r_wait,r_sample,r_stop); --定义各子状态
signal state:states:=r_start;
signal rxd_sync:std_logic;
begin
pro1:process(rxdr)
begin
if rxdr='0' then rxd_sync<='0';
else rxd_sync<='1';
end if;
end process;

pro2:process(bclkr,resetr,rxd_sync) --主控时序、组合进程
variable count:std_logic_vector(3 downto 0); --定义中间变量
variable rcnt:integer:=0;
variable rbufs:std_logic_vector(7 downto 0);
begin
if resetr='1' then state<=r_start; count:="0000"; --复位
elsif rising_edge(bclkr) then
case state is
when r_start=> --状态1,等待起始位
if rxd_sync='0' then state<=r_center; r_ready<='0'; rcnt:=0;
else state<=r_start; r_ready<='0';
end if;
when r_center=> --状态2,求出每位的中点
if rxd_sync='0' then
if count="0100" then state<=r_wait; count:="0000";
else count:=count+1; state<=r_center;
end if;
else state<=r_start;
end if;
when r_wait=> --状态3,等待状态
if count>="1110" then
if rcnt=framlenr then state<=r_stop;
else state<=r_sample;
end if;
count:="0000";
else count:=count+1; state<=r_wait;
end if;
when r_sample=>rbufs(rcnt):=rxd_sync; rcnt:=rcnt+1;state<=r_wait;
--状态4,数据位采样检测
when r_stop=>r_ready<='1'; rbuf<=rbufs; state<=r_start; --状态4,输出帧接收完毕信号
when others=>state<=r_start;
end case;
end if;
end process;
end Behavioral;

热心网友 时间:2023-10-25 12:54

你这个是典型的FIFO设计。随便找本FPGA设计的书上都有。好一点的FPGA本身就带有FIFO的模块,你可以直接用模块设计,只要做做连线就可以了。

热心网友 时间:2023-10-25 12:54

FPGA内部就有内置的存储器,向你推荐一本书《基于FPGA的工程设计与应用》上面有串口开发历程和SRAM开发历程。

热心网友 时间:2023-10-25 12:55

还要通过计算机?是什么接口232, usb,pci。。。。。,什么协议?要全部自己做的话感觉很复杂,很多啊 fpga上倒是简单。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
倩碧黄油适合哪种肤质的人使用? 倩碧有哪些护肤品比较受女性青睐? 倩碧紧致面霜适合哪些肤质的人使用? 倩碧护肤品适合什么肤质使用? 哪些肤质的人适合使用倩碧卓越润肤乳? 学校发的移动卡,套餐38的送一年宽带 现在卡不想用了,貌似宽带合约没到期... ...我居住浙江,有一个广西的移动卡,移动卡上还捆绑有宽带 我现在在外地我想注销移动卡或者联通卡怎么注销,回不到办卡的地方。 上海最建议去三个景点 为什么叫北京鸭篮球 数云的客户关系管理系统(CRM)有什么特色,核心价值是什么? fpga器件中的存储器块有何作用 FPGA上有4块DDR3,它们之间是独立的吗? fpga程序存储在哪里 是在外部存储器 还是内部? 如何在Altera的FPGA上使用DDR2存储器 FPGA内部有CPU和RAM 吗? FPGA程序存在外部存储器吗? 找梦幻西游高手帮我说明一下80和85的剧情任务,关键说明哪个要打!难度!价钱! 所有流程!!! 是否雇人!!! FPGA芯片内有哪两种存储器资源? FPGA存储器 FPGA用到的各个存储器问题 20分问梦幻西游80剧情的具体流程、、、有80的么,没80的说85的,有80就只说80的 蛇蝎美人第二季什么时候出 蛇蝎美人第二季什么时间上映 为什么权力的游戏演员动不动就领便当 《权利的游戏》为什么这么火 求美剧高清版的《蛇蝎美人》第一季第二季种子,谢谢了。 proteus能模拟烧录过程吗?上位机用烧录软件和虚拟串口工具 下位机是proteus模拟的带虚拟串口电路 可以吗? 求教,在Proteus中仿真atmega128单片机串口发送数据出错,一直是乱码 技工学校毕业证可以参加二级建造师吗 求蛇蝎美人 顶级生活 男女机密 三个电视剧的全季全集。谢谢 用ARM怎么读fpga的存储器 第五人格怎么快速攒碎片 CPLD与FPGA的二者关系 vivoy23l如何使系统更新到最新版本 vivoy23l手机版本遇到更新到最新版本怎么办? vivoy23l是不是安卓系统啊 vivoy23l版本4.4.4可以root吗,怎么root? vivo Y23L 能不能把系统升级到最新版的?有的人说不能升级 说升级了会出问题 到底能不能啊? 谁是VIVOY23L手机,现在的版本是多少,更新了吗?在哪里能看到更新日志 为什么vivoy23l不能再安装最新版王者荣耀? vivo y23l手机怎么更新升级? 为啥vivoY23L没有电量百分比? vivo Y23L 能不能把系统升级到最新版的 Vivo y23l 系统更新 vivoy23l版本4.4.4怎么隐藏图标 这是一个多功能电热锅的底部,请问中间的两个原件是什么,起什么作用? 刚买回来的多功能电热锅发现锅底有一圈蓝蓝的这是被用过了吗? 养老保险入职就交吗 入职后多久开始交社保 男的吃榴莲有什么好处