• 전문가 요청 쿠폰 이벤트
*진*
Bronze개인
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 1
검색어 입력폼
  • VHDL을 이용한 UART설계 평가D별로예요
    UART란?? Block Diagram Transmitter / Receiver / Baud Rate generator Simulation_top Reference VHDL coding (Top 3block)Contents비동기 통신 (Universal Asynchronous Receiver Transmitter) ● 직렬데이터를 송수신하는 직렬 통신 인터페이스 ● 동기 클럭이 없는 상태에서 통신 ● Start / End bit 첨가 ● RX / TX port가 모두 존재 - full duplex ● Baud Rate (통신속도 지정) data 처리속도 조절!!UART란??직렬 데이터 송수신표준 직렬 데이터 형식직렬 데이터 전송Baud Rate : 단위 시간당 전송된 비트 수UART Block Diagram(1)UART Block Diagram(2)직렬통신 제어/상태 레지스터SCCR (Serial Communication Control Register) : 직렬 통신 제어 레지스터 ● RIE (Receiver Interrupt Enable) - UART 수신부의 인터럽트 발생을 허용 - RIE=1이고, 데이터 수신 완료시(RDRE) Host Processor에게 인터럽트(SCI_IRQ) 발생 ● TIE (Transmitter Interrupt Enable) - UART 송신부의 인터럽트 발생을 허용 - TIE=1이고, TDR이 비어있는 경우(TDRE=1) 인터럽트(SCI_IRQ) 발생 ● SEL[1:0] : Baud Rate를 지정 적절한 송수신 클럭 생성SCSR (Serial Communication Status Register) : 직렬 통신 상태 레지스터 ● TDRE (TDR Empty) - TDR이 Empty인 경우 지시 ● RDRF (RDR Full) - RDR이 Full인 경우 지시 ● OE (Overrun Error) - 이전에 수신된 데이터를 Host Processor가 읽지 않은 상태에서 새로운 데이터가 수신된 경우 ● FE (Framing 의해서 8가지 Baud Rate 중에 하나를 선택!! (TDR Empty) ● 시스템 클럭 주파수 : 8MHz (T=125ns=0.125us)Top_simulation*************101VHDL Coding_Toplibrary ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart is port( clock : in std_logic; rx_sdata : in std_logic; tx_sdata : out std_logic; rx_pdata : out std_logic_vector(7 downto 0); tx_pdata : in std_logic_vector(7 downto 0); rx_full, tx_empty : out std_logic; load : in std_logic; read : in std_logic; baud : in std_logic_vector(2 downto 0)); end uart; architecture behavioral of uart is signal rxclk : std_logic := '0'; signal txclk : std_logic := '0';begin clock_gen : entity work.baudgen port map( clk_in = clock, baudsel = baud, rxclk_out = rxclk, txclk_out = txclk); rx_block : entity work.rs232_rx port map( clk = rxclk, din = rx_sdata, dataready = rx_full, read = read, dout = rx_pdata); tx_block : entity work.rs232_tx port map( clk = txclk, load = load, din = tx_pdata, dout = tx_sdata, empty = tx_emptit : std_logic := '0'; constant stopbit : std_logic := '1'; signal data : std_logic_vector(MAXCNT - 1 downto 0) := (others = stopbit); signal cnt : integer range 0 to MAXCNT := MAXCNT; signal latched : std_logic := '0'; signal latch : std_logic_vector(7 downto 0);Transmit Component(2)begin dout = data(0); empty = '1' when latched = '0' and cnt = MAXCNT else '0'; process (load,cnt) variable flag : std_logic := '0'; begin -- load new data on edge if rising_edge(load) then flag := '1'; latch = din; end if; if cnt = 0 then flag := '0'; end if; latched = flag; end process;Transmit Component(3)process (clk) begin if rising_edge(clk) then if (cnt = MAXCNT) then if latched = '1' then data = stopbit latch startbit; cnt = 0; end if; else cnt = cnt + 1; data (MAXCNT - 2 downto 0) = data (MAXCNT - 1 downto 1); end if; end if; end process; end behavioral;Receive Component(1)library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity rs232_rx is px_states; signal data : std_logic_vector(7 downto 0);Receive Component(2)begin process (clk, read) variable bit_cnt : integer range 0 to MAXCOUNT; variable sync_cnt : integer range 0 to CLK_SCALE; begin if rising_edge(clk) then case rx_state is when idle = if din = '0' then -- we are receiving a start bit bit_cnt := 0; sync_cnt := 0; rx_state = synchronize; end if; when synchronize = sync_cnt := sync_cnt + 1; if sync_cnt = SYNC_VAL then -- halfway into the start bit, now synchronized sync_cnt := 0; if din = '0' then rx_state = receive; -- good start bit else rx_state = idle; -- bad start bit end if; end if;Receive Component(3)when receive = sync_cnt := sync_cnt + 1; -- don't want to sample until we are in the middle of the next bit if sync_cnt = CLK_SCALE then sync_cnt := 0; bit_cnt := bit_cnt + 1; data = din data(7 downto 1); if bit_cnt = MAXCOUNT then rx_state = stopping; end if; end if; when stopping = sync_cnt := sync_cnt + 1; -- don't want to finish until we are in the middle of tudgen ; architecture behavioral of baudgen is constant FCLK : integer := 50000000; constant CLKSCALE : integer := 16; constant max_rx : integer := ((FCLK/9600)/2)/CLKSCALE; constant max_tx : integer := (FCLK/9600)/2; signal rx_count : integer range 0 to max_rx; signal tx_count : integer range 0 to max_tx; signal rxclk : std_logic := '0'; signal txclk : std_logic := '0';Baud Rate Component(2)begin process (baudsel) begin case baudsel is when 000 = rx_count = ((FCLK/9600)/2)/CLKSCALE; tx_count = (FCLK/9600)/2; when 001 = rx_count = ((FCLK/19200)/2)/CLKSCALE; tx_count = (FCLK/19200)/2; when 010 = rx_count = ((FCLK/38400)/2)/CLKSCALE; tx_count = (FCLK/38400)/2; when 011 = rx_count = ((FCLK/57600)/2)/CLKSCALE; tx_count = (FCLK/57600)/2; when 111 = rx_count = 2; tx_count = 2 * CLKSCALE; when others = rx_count = ((FCLK/115200)/2)/CLKSCALE; tx_count = (FCLK/115200)/2; end case; end process;Baud Rate Component(3)process (clk_in) variable count1 : integer range 0 to max_rx := 0; variable count2
    프로그램소스| 2007.12.23| 24페이지| 3,000원| 조회(1,429)
    미리보기
전체보기
받은후기 1
1개 리뷰 평점
  • A+최고예요
    0
  • A좋아요
    0
  • B괜찮아요
    0
  • C아쉬워요
    0
  • D별로예요
    1
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 04월 03일 금요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
12:10 오전
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감