📄 txunit1.txt
字号:
Library ieee;
Use ieee.std_logic.1164.all;
Use ieee.std_logic_arith.all;
Use ieee.std_logic.unsigned.all;
entity txunit1 is
port(
Clk : in std _logic; --主系统频率clock signal
enable : in std _logic; -- 发送的同步使能信号reset input
load : in std _logic; --将要发送的Datao控制送入Tbuff
reset : in std _logic; --重设信号输入reset input
TxD : out std _logic; --数据发送端
TRegE : out std _logic; --Tregx寄存器已经送入或已发送完成标志
TBufE : out std _logic; --外部 datao数据转载缓冲寄存器空着的标志
datao : in std _logic_vector(7downto 0); --要送入tbuff的数据输入接口
end entity;
architecture behaviour of txunit1 is
signal TBuff : std _logic_vector(7 downto 0); --数据发送缓冲寄存器
signal TReg : std _logic_vector(7 downto 0); --数据发送寄存器
signal bitcnt : unsigned(3 downto 0); --发送的位计数器
signal tmpTRegE : std_logic; --发送寄存器已空着的标志标示
signal tmp TBufE : std_logic; --发送缓冲寄存器已空着的标志标示
begin --进行TX发送的控制电路描述
process(clk,reset,enable,load,datao,TBuff,TReg, tmpTRegE,tmp TBufE)
variable tmp_ TRegE : std_logic;
constant cntone : unsigned(3 downto 0)=”0001”;
begin
if rising_edge(sysclk) then
--在时脉clk的上升沿端出发执行下列数据转移
if reset=’0’ then --重设reset=0时
tmpTRegE <=’1’;
tmp TBufE <=’1’;
TxD<=’1’; --TxD处于1的停止位
bitcnt<=”0000”; --发送位计数器为00位
elsif load=’1’ then --若是开始送入数据(load=1)
TBuff <= datao; --将外部datao送入tbuff内
tmpTBufE <=’0’; --表示tbuff有数据非空着
elsif enable=’1’ then --若是开始启动传输数据(enable=1)
if (tmp TBufE =’0’) and (tmpTRegE =’1’) then
--若是在tbuff内容数据未转送入treg的tmpTbufE=’0’ 状态及treg没--有数据的tmptrege=1状态下则
TReg<= TBuff;
--将tbuff送入treg
tmpTRegE <=’0’;
-- 令tmpTRegE =’0’告知treg有数据准备发送
tmp TBufE <=’1’;
--令tmp TBufE =’1’告知tbuff没有数据可送入
elsif tmpTRegE =’0’ then
--若tmpTRegE =’0’已有数据则开始发送
case bitcnt is --开始作发送位的判别计数
when “0000”=> --当计数为0时
TxD<=’0’; --开始发送TxD=’0’启动信号
bitcnt<=bitcnt+cntone; --令位计数器加1
when “0001”| “0010”| “0011”|
“0100”| “0101”| “0110”|
“0111”| “1000”=> --当位计数处于1-8时
TReg<=’1’&TReg(7downto1); --treg以1右移
TxD<=Treg(0); -- 令Treg(0)的内容输出到TxD发送
bitcnt<=bitcnt+cntone; --令位计数加1
when “1001”=> --当位计数处于9的第9位发送时
TxD<=’1’; -- TxD=1发送停止的信号
TReg<=’1’&TReg(7downto1); -- TReg以1右移
bitcnt<=”0000”; --位计数器bitcnt=0
tmpTRegE <=’1’; --treg已发送完成令tmpTRegE =’1’
when others => null; --在其他态则不做任何运算
end case;
end if
end if;
end if;
end process;
TRegE<=tmpTRegE; --将标志tmpTRegE输出到TRegE端
TBufE<=tmpTBufE; ----将标志tmpTbufE输出到TbufE端
end behaviour;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -