【正文】
elsif s_data_bit =1000 then if s_data_reg(9) = (s_data_reg(1) xor s_data_reg(2) xor s_data_reg(3) xor s_data_reg(4) xor s_data_reg(5) xor s_data_reg(6) xor s_data_reg(7) xor s_data_reg(8) )then s_data_valid = 39。139。 else s_data_valid = 39。039。 end if。 elsif s_data_bit =1001 then if s_data_reg(10) = (s_data_reg(1) xor s_data_reg(2) xor s_data_reg(3) xor s_data_reg(4) xor s_data_reg(5) xor s_data_reg(6) xor s_data_reg(7) xor s_data_reg(8) xor s_data_reg(9) )then s_data_valid = 39。139。 else s_data_valid = 39。039。 end if。 else s_data_valid = 39。039。 end if。 elsif s_check_mode = 39。039。 then if s_data_bit =0111 then if s_data_reg(8) = (s_data_reg(1) xor s_data_reg(2) xor s_data_reg(3) xor s_data_reg(4) xor s_data_reg(5) xor s_data_reg(6) xor s_data_reg(7)) then s_data_valid = 39。139。 else s_data_valid = 39。039。 end if。 elsif s_data_bit =1000 then if s_data_reg(9) = (s_data_reg(1) xor s_data_reg(2) xor s_data_reg(3) xor s_data_reg(4) xor s_data_reg(5) xor s_data_reg(6) xor s_data_reg(7) xor s_data_reg(8)) then s_data_valid = 39。139。 else s_data_valid = 39。039。 end if。 elsif s_data_bit =1001 then if s_data_reg(10) = (s_data_reg(1) xor s_data_reg(2) xor s_data_reg(3) xor s_data_reg(4) xor s_data_reg(5) xor s_data_reg(6) xor s_data_reg(7) xor s_data_reg(8) xor s_data_reg(9)) then s_data_valid = 39。139。 else s_data_valid = 39。039。 end if。 else s_data_valid = 39。039。 end if。 else s_data_valid = 39。039。 end if。 end if。 if s_data_valid = 39。139。 and s_full=39。139。 then s_end = 39。139。 。 data_output = s_data_reg(9 downto 1) 。 else s_end = 39。039。 end if。 end process ccc。 data_valid = s_data_valid。 ddd:process(clk,clr)數(shù)據(jù)位數(shù)解析 begin if clr=39。039。 then s_data_bit=0000。 elsif clk39。event and clk=39。139。 then if data_bit = 01 then s_data_bit = 0111。 elsif data_bit = 10 then s_data_bit = 1000。 elsif data_bit = 11 then s_data_bit = 1001。 elsif data_bit = 00 then s_data_bit = 0000 。 else s_data_bit = 0000 。 end if。 end if。 end process ddd。 eee:process(clk,clr)數(shù)據(jù)校驗(yàn)解析 begin if clr=39。039。 then s_check_bit=39。039。 s_check_mode= 39。039。 elsif clk39。event and clk=39。139。 then if check_bit = 01 then s_check_bit = 39。139。 s_check_mode = 39。139。 elsif check_bit = 10 then s_check_bit = 39。139。 s_check_mode = 39。039。 elsif check_bit = 11 then s_check_bit = 39。039。 elsif check_bit = 00 then s_check_bit=39。039。 s_check_mode= 39。039。 else s_check_bit=39。039。 s_check_mode= 39。039。 end if。 end if。 end process eee。 fff:process(clk,clr)停止位數(shù)解析 begin if clr=39。039。 then s_end_bit=00。 elsif clk39。event and clk=39。139。 then if end_bit = 39。039。 then s_end_bit = 01。 elsif end_bit = 39。139。 then s_end_bit = 10。 else s_end_bit = 00 。 end if。 end if。 end process fff。 end abc。 4發(fā)送library ieee。use 。use 。use 。********************************entity send_judge isport( clr: in std_logic。 clk: in std_logic。 judge_enable: in std_logic。 data_input: in std_logic_vector(7 downto 0)。輸入數(shù)據(jù) baud_rate : in std_logic_vector(15 downto 0)。 波特率:表示對(duì)于時(shí)鐘的分頻 data_bit : in std_logic_vector(1 downto 0)。 數(shù)據(jù)位:01表示7位,10表示8位,11表示9位,00表示無效 check_bit : in std_logic_vector(1 downto 0)。校驗(yàn)位:01表示奇數(shù)校驗(yàn),10表示偶數(shù)校驗(yàn),11表示無校驗(yàn),00表示無效 end_bit : in std_logic。 停止位:0表示1位,1表示2位 data_valid : out std_logic。數(shù)據(jù)有效指示: 0表示數(shù)據(jù)無效,1表示數(shù)據(jù)有效 data_output: out std_logic )。end entity send_judge。architecture abc of send_judge issignal s_baud_clk : std_logic。signal s_begin : std_logic。signal s_end : std_logic。signal s_full : std_logic。signal s_data_valid : std_logic。signal s_data_bit : std_logic_vector(3 downto 0)。signal s_check_bit : std_logic。signal s_check_mode: std_logic。signal s_end_bit : std_logic_vector(1 downto 0)。signal s_counter_a : std_logic_vector(15 downto 0)。時(shí)鐘分頻系數(shù)signal s_counter_b : std_logic_vector(3 downto 0)。數(shù)據(jù)長(zhǎng)度:最大13位signal s_data_reg : std_logic_vector(15 downto 0)。數(shù)據(jù)寄存器begin aaa:process(clk,clr,judge_enable)產(chǎn)生波特率時(shí)鐘 begin if clr=39。039。 or s_begin=39。039。 or judge_enable =39。039。 then s_baud_clk=39。039。 s_counter_a=X0000。 elsif clk39。event and clk=39。139。 then if s_counter_a baud_rate then s_counter_a= s_counter_a+1。 else s_counter_a=X0000。 s_baud_clk= not s_baud_clk。 end if。 end if。 end process aaa。 bbb:process(clk, clr)指示模塊工作啟示 begin if clr=39。039。 or s_end=39。139。 then s_begin=39。039。 elsif clk39。event and clk=39。139。 then if data_input = X00 then s_begin=39。139。 end if。 end if。 end process bbb。 ccc:process(s_baud_clk,s_begin,clr,clk)數(shù)據(jù)解釋 begin if(s_begin=39。039。 or clr=39。039。) then s_full=39。039。 elsif s_baud_clk39。event and s_baud_clk=39。139。 then s_data_reg(7 downto 0)= data_input。 暫存數(shù)據(jù) s_full = 39。139。 end if。 if(s_begin=39。039。 or clr=39。039。) then s_data_valid = 39。039。 if s_check_mode = 39。139。 then if s_data_bit =0111 then if s_data_reg(8) = (s_data_reg(1) xor s_data_reg(2) xor s_data_reg(3) xor s_data_reg(4) xor s_data_reg(5) xor s_data_reg(6) xor s_data_reg(7) ) then s_data_valid = 39。139。 else s_data_valid = 39。039。 end if。 elsif s_data_bit =1000 then if s_data_reg(9) = (s_data_reg(1) xor s_data_reg(2) xor s_data_reg(3) xor s_data_reg(4) xor s_data_reg(5) xor s_data_reg(6) xor s_data_reg(7) xo