专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
FPGA
大神用VHDL写的uart_rx模块,没看明白,请问是在哪里接收的数据?cnt是什么?
2019-07-15 20:52
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
FPGA
2945
6
1768
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
en
ti
ty uart_rx is
port(
rst_n :in std_logic:='0';
clk :in std_logic:='0';
data_bits :in std_logic_vector(3 downto 0):="0000";
parity_en :in std_logic_vector(2 downto 0):="000";
rx_bit_in :in std_logic:='1';
rx_dv :out std_logic:='0';
rx_data :out std_logic_vector(7 downto 0):=(others=>'0');
error :out std_logic:='0'
);
end entity;
architecture rtl of uart_rx is
type status_type is ( s_idle,
s_rx_start_bit,
s_rx_data,
s_rx_parity,
s_stop_bit);
signal c_status:status_type:=s_idle;
signal cnt:natural range 0 to 31:=0;
signal rx_data_r:std_logic_vector(7 downto 0):=(others=>'0');
--signal data_bits_r:std_logic_vector(3 downto 0):="0000"; --0101=5 stop bit --0110=6 stop bit --0111=7 stop bit --1000=8 stop bit
--signal parity_en_r:std_logic_vector(2 downto 0):="000"; --0=no parity --1=0 parity --2=1 parity --3=odd parity --4=even parity
signal bit_index:natural range 0 to 8:=0;
signal parity_r:std_logic:='0';
signal rx_bit_r:std_logic:='0';
begin
--数据同步 data synchronization
process(clk)
begin
if rising_edge(clk) then
rx_bit_r<=rx_bit_in;
else
null;
end if;
end process;
process(rst_n,clk)
begin
if rst_n='0' then
c_status<=s_idle;
rx_dv<='0';
rx_data<=(others=>'0');
rx_data_r<=(others=>'0');
error<='0';
bit_index<=0;
cnt<=0;
elsif rising_edge(clk) then
case c_status is
when s_idle => if rx_bit_r='0' then
c_status<=s_rx_start_bit;
else
c_status<=s_idle;
end if;
cnt<=0;
bit_index<=0;
when s_rx_start_bit => if cnt>=6 then
if rx_bit_r='0' then
c_status<=s_rx_data;
else
c_status<=s_idle;
end if;
cnt<=0;
else
c_status<=s_rx_start_bit;
cnt<=cnt+1;
end if;
rx_data_r<=(others=>'0');
rx_dv<='0';
rx_data<=(others=>'0');
error<='0';
when s_rx_data => if cnt>=15 then
cnt<=0;
if bit_index>=(unsigned(data_bits)-1) then
case parity_en is
when "001" => parity_r<='0'; --0 parity
c_status<=s_rx_parity;
when "010" => parity_r<='1'; --1 parity
c_status<=s_rx_parity;
when "011" => parity_r<=(rx_data_r(0) xor rx_data_r(1)) xor
(rx_data_r(2) xor rx_data_r(3)) xor
(rx_data_r(4) xor rx_data_r(5)) xor
(rx_data_r(6) xor rx_data_r(7)) xor '1'; --odd parity (奇校验)
c_status<=s_rx_parity;
when "100" => parity_r<=(rx_data_r(0) xor rx_data_r(1)) xor
(rx_data_r(2) xor rx_data_r(3)) xor
(rx_data_r(4) xor rx_data_r(5)) xor
(rx_data_r(6) xor rx_data_r(7)) ; --even parity (偶校验)
c_status<=s_rx_parity;
when others => c_status<=s_stop_bit;
end case;
bit_index<=0;
else
bit_index<=bit_index+1;
end if;
rx_data_r(bit_index)<=rx_bit_r;
else
cnt<=cnt+1;
end if;
when s_rx_parity => if cnt>=15 then
if rx_bit_r/=parity_r then
error<='1';
else
null;
end if;
c_status<=s_stop_bit;
cnt<=0;
rx_dv<='1';
rx_data<=rx_data_r;
else
cnt<=cnt+1;
c_status<=s_rx_parity;
end if;
when s_stop_bit => if cnt>=15 then
cnt<=0;
c_status<=s_idle;
else
cnt<=cnt+1;
c_status<=s_stop_bit;
end if;
rx_dv<='1';
rx_data<=rx_data_r;
when others => c_status<=s_idle;
rx_dv<='0';
error<='0';
end case;
else
null;
end if;
end process;
end rtl;
复制代码
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
搞个锤子
1楼-- · 2019-07-15 23:17
能看懂的大神,帮帮忙啊
加载中...
爱上_在路上
2楼-- · 2019-07-16 04:23
输入信号中的data_bits 在程序中没有用到吗?
加载中...
搞个锤子
3楼-- · 2019-07-16 05:43
爱上_在路上 发表于 2018-7-23 14:16
输入信号中的data_bits 在程序中没有用到吗?
data_bits是输入端口,你说的是data_bits_r?
加载中...
爱上_在路上
4楼-- · 2019-07-16 07:56
就是这个data_bits输入端口,在程序中没有看到它的数据传给谁啊
加载中...
搞个锤子
5楼-- · 2019-07-16 10:40
精彩回答 2 元偷偷看……
加载中...
爱上_在路上
6楼-- · 2019-07-16 11:29
我觉得data_bits是数据输入端口,但是程序中并没有读取这个数据输入端口,所以不清楚在哪里接收的数据。
加载中...
一周热门
更多
>
相关问题
如何用FPGA驱动LCD屏?
5 个回答
请教一下各位专家如何用FPGA做eDP接口?
6 个回答
FPGA CH7301c DVI(显示器数字接口)没有数字输出
7 个回答
100颗FPGA的板子,开开眼界
6 个回答
求教自制最小系统版
10 个回答
基于FPGA的X射线安检设备控制器
2 个回答
CycolneIVGX核心板,可扩展PCIE,光纤接口,大家来鉴赏一下
6 个回答
关于VHDL或Verllog程序稳定性的问题
11 个回答
相关文章
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
Xilinx的FPGA开发工具——ISE开发流程
0个评论
基于FPGA的详细设计流程
0个评论
干货分享,FPGA硬件系统的设计技巧
0个评论
一种通过FPGA对AD9558时钟管理芯片进行配置的方法
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
FPGA
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
data_bits是输入端口,你说的是data_bits_r?
一周热门 更多>