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

📄 r_divider.vhd.svn-base

📁 Pure hardware JPEG Encoder design. Package includes vhdl source code, test bench, detail design docu
💻 SVN-BASE
字号:
----------------------------------------------------------------------------------                                                                            ----                          V H D L    F I L E                                ----                          COPYRIGHT (C) 2009                                ----                                                                            ------------------------------------------------------------------------------------                                                                            ---- Title       : DIVIDER                                                      ---- Design      : Divider using reciprocal table                               ---- Author      : Michal Krepa                                                 ----                                                                            ------------------------------------------------------------------------------------                                                                            ---- File        : R_DIVIDER.VHD                                                ---- Created     : Wed 18-03-2009                                               ----                                                                            ------------------------------------------------------------------------------------                                                                            ----------------------------------------------------------------------------------   ---------------------------------------------------------------------------------- MAIN DIVIDER top level--------------------------------------------------------------------------------library IEEE;  use IEEE.STD_LOGIC_1164.All;  use IEEE.NUMERIC_STD.all;entity r_divider is  port   (       rst   : in  STD_LOGIC;       clk   : in  STD_LOGIC;       a     : in  STD_LOGIC_VECTOR(11 downto 0);            d     : in  STD_LOGIC_VECTOR(7 downto 0);                   q     : out STD_LOGIC_VECTOR(11 downto 0)  ) ;   end r_divider ;architecture rtl of r_divider is    signal romr_datao    : std_logic_vector(15 downto 0);  signal romr_addr     : std_logic_vector(7 downto 0);  signal dividend      : signed(11 downto 0);  signal dividend_d1   : unsigned(11 downto 0);  signal reciprocal    : unsigned(15 downto 0);  signal mult_out      : unsigned(27 downto 0);  signal mult_out_s    : signed(11 downto 0);  signal signbit       : std_logic;  signal signbit_d1    : std_logic;  signal signbit_d2    : std_logic;  signal signbit_d3    : std_logic;  signal round         : std_logic;  begin  U_ROMR : entity work.ROMR    generic map    (      ROMADDR_W    => 8,      ROMDATA_W    => 16    )    port map    (      addr  => romr_addr,      clk   => CLK,      datao => romr_datao    );      romr_addr <= d;  reciprocal <= unsigned(romr_datao);     dividend <= signed(a); signbit <= dividend(dividend'high); rdiv : process(clk,rst) begin   if rst = '1' then     mult_out    <= (others => '0');     mult_out_s  <= (others => '0');     dividend_d1 <= (others => '0');     q           <= (others => '0');     signbit_d1  <= '0';     signbit_d2  <= '0';     signbit_d3  <= '0';     round       <= '0';   elsif clk = '1' and clk'event then     signbit_d1  <= signbit;     signbit_d2  <= signbit_d1;     signbit_d3  <= signbit_d2;     if signbit = '1' then       dividend_d1 <= unsigned(0-dividend);     else       dividend_d1 <= unsigned(dividend);     end if;     mult_out <= dividend_d1 * reciprocal;          if signbit_d2 = '0' then       mult_out_s <= resize(signed(mult_out(27 downto 16)),mult_out_s'length);     else       mult_out_s <= resize(0-signed(mult_out(27 downto 16)),mult_out_s'length);       end if;     round <= mult_out(15);          if signbit_d3 = '0' then       if round = '1' then         q <= std_logic_vector(mult_out_s + 1);       else         q <= std_logic_vector(mult_out_s);       end if;     else       if round = '1' then         q <= std_logic_vector(mult_out_s - 1);       else         q <= std_logic_vector(mult_out_s);       end if;     end if;   end if; end process; end rtl;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -