⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 txunit1.txt

📁 UART发送TX控制电路设计
💻 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 + -