亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? add_cyclic_prefix.vhd

?? OFDM的fpga實現
?? VHD
?? 第 1 頁 / 共 2 頁
字號:
-- added valid and ready test. now cnt is not free running when input is not valid
      elsif (in_valid_r = '1') and (in_ready_r = '1') then
        mem_wren <= '1';
      else
        mem_wren <= '0';
      end if;
    end if;
  end process;


  -- when a Buffer has been filled up, toggling appropriate signal
  -- to flag this. These signals are used by the read side of FIFO
  -- to determine when the Buffers contain valid data
  process (clk_in, rst_in_n)
  begin
    if (rst_in_n = '0') then
      bufa_wr_tog <= '0';
      bufb_wr_tog <= '0';
    elsif rising_edge(clk_in) then
      if (in_eop_r2 = '1') then
        if (buf_b_a_n = '0') then
          --actual value of buf_b_a_n is 1 (it gets inverted after sop)
          bufb_wr_tog <= not(bufb_wr_tog);
        else
          bufa_wr_tog <= not(bufa_wr_tog);
        end if;
      end if;
    end if;
  end process;

  bufa_taken <= (bufa_wr_early_tog xor bufa_rd_tog_r2);
  bufb_taken <= (bufb_wr_early_tog xor bufb_rd_tog_r2);

  -- This submodule can only accept the next block of N samples from IFFT core
  -- if either Buffer A OR B is empty. Due to the streaming nature of FFT
  -- output, in_ready_tmp aligns with fft source eop, i.e. it de-asserts the
  -- cycle after in_eop if both buffers are taken.
  process (clk_in, rst_in_n)
  begin  -- process
    if (rst_in_n = '0') then
      in_ready_tmp <= '0';
      in_ready_r   <= '0';
    elsif rising_edge(clk_in) then
      if (bufa_taken = '1' and bufb_taken = '1') then
        if (in_eop = '1') then
          in_ready_tmp <= '0';
        else
          in_ready_tmp <= in_ready_tmp;
        end if;
      else
        in_ready_tmp <= '1';
      end if;
      in_ready_r <= in_ready_tmp;
    end if;
  end process;

  in_ready <= in_ready_tmp;

-- Synchronising Buffer read signals generated using clk_out into clk_in  domain
  process (clk_in, rst_in_n)
  begin
    if (rst_in_n = '0') then
      bufa_rd_tog_r  <= '0';
      bufa_rd_tog_r2 <= '0';
      bufb_rd_tog_r  <= '0';
      bufb_rd_tog_r2 <= '0';
    elsif rising_edge(clk_in) then
      bufa_rd_tog_r  <= bufa_rd_tog;
      bufa_rd_tog_r2 <= bufa_rd_tog_r;
      bufb_rd_tog_r  <= bufb_rd_tog;
      bufb_rd_tog_r2 <= bufb_rd_tog_r;
    end if;
  end process;

  -----------------------------------------------------------------------------
  -- Reading Data from Dual Port RAM
  -- The memory contains 2*Nmax locations (1 IFFT worth of data).
  -- Reading starts at address current N - Cyclic Prefix Delay to N-1, 
  -- then from address 0 to current N-1, 
  -- then from address 2*Nmax - (current CP) to Nmax-1+current CP
  -- then from address Nmax to Nmax-1+current CP and so on..., 
  -----------------------------------------------------------------------------

  -- Determining start address for first sample for cyclic prefix for buffer A and buffer B
  process (clk_out, rst_out_n)
  begin
    if (rst_out_n = '0') then
      cp_start_addra <= (others => '0');
      cp_start_addrb <= (others => '0');
    elsif rising_edge(clk_out) then
      if (La = 0) then
        cp_start_addra <= (others => '0');
      else
        cp_start_addra <= std_logic_vector(to_unsigned(Na - La, MADDR_WIDTH));
      end if;
      if Lb = 0 then
        cp_start_addrb <= std_logic_vector(to_unsigned(MDEPTH/2, MADDR_WIDTH));
      else
        cp_start_addrb <= std_logic_vector(to_unsigned(MDEPTH/2+Nb - Lb, MADDR_WIDTH));
      end if;
    end if;
  end process;

  -- synchronising Buffer  write signals to clk_out domain
  process (clk_out, rst_out_n)
  begin
    if (rst_out_n = '0') then
      bufa_wr_tog_r  <= '0';
      bufa_wr_tog_r2 <= '0';
      bufb_wr_tog_r  <= '0';
      bufb_wr_tog_r2 <= '0';
    elsif rising_edge(clk_out) then
      bufa_wr_tog_r  <= bufa_wr_tog;
      bufa_wr_tog_r2 <= bufa_wr_tog_r;
      bufb_wr_tog_r  <= bufb_wr_tog;
      bufb_wr_tog_r2 <= bufb_wr_tog_r;
    end if;
  end process;

  bufa_full <= bufa_wr_tog_r2 xor bufa_rd_tog;
  bufb_full <= bufb_wr_tog_r2 xor bufb_rd_tog;

  -- incrementing read address
  process (clk_out, rst_out_n)
  begin
    if (rst_out_n = '0') then
      mem_rdaddr    <= (others => '0');
      start_read    <= '0';
      post_cp       <= '0';
      bufa_rd_tog   <= '0';
      bufb_rd_tog   <= '0';
      bufa_sym_strt <= (others => '0');
      bufb_sym_strt <= (others => '0');
      out_eop_a     <= '0';
      out_eop_b     <= '0';
      out_valid_sr  <= (others => '0');
      out_eop_sr    <= (others => '0');
    elsif rising_edge(clk_out) then
      --shift registers to delay generation of symbol start output pulse
      --according to delay of reading from memory
      bufa_sym_strt(1 downto 0) <= bufa_sym_strt(2 downto 1);
      bufb_sym_strt(1 downto 0) <= bufb_sym_strt(2 downto 1);
      bufa_sym_strt(2)          <= '0';
      bufb_sym_strt(2)          <= '0';
      --shift register to delay generation of out_valid according
      --to delay of reading from memory
      out_valid_sr(2 downto 0)  <= out_valid_sr(3 downto 1);
      out_eop_sr(0)             <= out_eop_sr(1);
      out_eop_sr(1)             <= tmp_eop;
      if (out_ready = '1') then
        if ((start_read = '0') and (bufa_full = '0')) then
          mem_rdaddr                <= cp_start_addra;
          bufa_sym_strt(2 downto 0) <= "100";
          out_valid_sr(3 downto 0)  <= "1000";
        else
          -- first time come here due to bufa_full = '0'; after the first
          -- package come here due to start_read = '1'         
          start_read      <= '1';
          out_valid_sr(3) <= '1';       -- unless buffer is not available
                                        -- to send data from
                                        -- (overwritten later on)
          if (mem_rdaddr = std_logic_vector(to_unsigned(Na-1, MADDR_WIDTH))) then
            -- end of Buffer A (determine if just finished outputting cyclic prefix or 
            -- end of symbol)            
            if (post_cp = '0') then
              mem_rdaddr <= std_logic_vector(to_unsigned(0, MADDR_WIDTH));
              post_cp    <= '1';
            else
              -- reading out post cp data
              out_eop_a <= '1';
              if (bufb_full = '1') then
                mem_rdaddr       <= cp_start_addrb;
                post_cp          <= '0';
                bufa_rd_tog      <= not(bufa_rd_tog);
                bufb_sym_strt(2) <= '1';
              else
                -- buffer B is not full
                out_valid_sr(3) <= '0';
              end if;
            end if;  -- if (post_cp = '0') then
          elsif (mem_rdaddr = std_logic_vector(to_unsigned(MDEPTH/2 + Nb -1, MADDR_WIDTH))) then
            --end of Buffer B (determine if just finished outputting cyclic prefix or 
            -- end of symbol)           
            if (post_cp = '0') then
              mem_rdaddr <= std_logic_vector(to_unsigned(MDEPTH/2, MADDR_WIDTH));
              post_cp    <= '1';
            else
              out_eop_b <= '1';
              if (bufa_full = '1') then
                mem_rdaddr       <= cp_start_addra;
                post_cp          <= '0';
                bufb_rd_tog      <= not(bufb_rd_tog);
                bufa_sym_strt(2) <= '1';
              else
                -- buffer A is not full
                out_valid_sr(3) <= '0';
              end if;  -- if (bufa_full = '0')
            end if;  -- if (post_cp = '0') then
          else
            -- output cp;mem_raddr != N-1 nor 2N-1
            -- may or may not in output mode
            mem_rdaddr <= mem_rdaddr + 1;
            out_eop_a  <= '0';
            out_eop_b  <= '0';
          end if;
        end if;  -- if ((start_read = '0') and (bufa_full = '0')) then
      else
        -- AST Sink not ready to take output: deassert out_valid
        out_valid_sr(3) <= '0';
      end if;  -- if (out_ready = '1') then      
    end if;  -- if (rst_out_n ='0') then
  end process;

  -----------------------------------------------------------------------------
  -- Output AST Data Source Interface
  --
  -- 
  -- This Source assumes ready_latency = 4 clk cycles.
  -- Supports back pressure (i.e. allows Sink to deassert out_ready).
  -- Also if no data to send, will deassert out_valid.
  --
  -- Upon reset waits for slave sink to assert out_ready. This is fed back to input 
  -- interface as when to assert slave_sink_dav.
  --
  -- The start of each OFDM symbol is denoted by a high on out_sop.
  -----------------------------------------------------------------------------
  process (clk_out, rst_out_n)
  begin
    if (rst_out_n = '0') then
      out_real <= (others => '0');
      out_imag <= (others => '0');
    elsif rising_edge(clk_out) then
      out_real <= mem_dout(DOUTWIDTH - 1 downto 0);
      out_imag <= mem_dout(2 * DOUTWIDTH - 1 downto DOUTWIDTH);
    end if;
  end process;

  -- out_sop pulses high at beginning of each OFDM symbol (i.e. 
  -- coincident with first Cyclic Prefix sample).
  -- The delay is calculated from delay of reading first sample of OFDM symbol data
  -- from memory upon and also includes the extra registering
  -- stage above before data is clocked out of this module.
  process (clk_out, rst_out_n)
  begin
    if (rst_out_n = '0') then
      out_sop <= '0';
    elsif rising_edge(clk_out) then
      if (bufa_sym_strt(0) = '1') then
        out_sop <= '1';
      elsif (bufb_sym_strt(0) = '1') then
        out_sop <= '1';
      else
        out_sop <= '0';
      end if;
    end if;
  end process;
  out_valid <= out_valid_sr(0);
  tmp_eop   <= ((out_valid_sr(2) and out_eop_a) or (out_valid_sr(2) and out_eop_b));
  out_eop   <= out_eop_sr(0);

  output_N_L : process (clk_out, rst_out_n)
  begin
    if (rst_out_n = '0') then
      Nout <= (others => '0');
      Lout <= (others => '0');
    elsif rising_edge(clk_out) then
      -- Nout and Lout is sampled at output sop
      if (bufa_sym_strt(0) = '1') then
        Nout <= std_logic_vector(to_unsigned(Na, NWIDTH));
        Lout <= std_logic_vector(to_unsigned(La, CPWIDTH));
      elsif (bufb_sym_strt(0) = '1') then
        Nout <= std_logic_vector(to_unsigned(Nb, NWIDTH));
        Lout <= std_logic_vector(to_unsigned(Lb, CPWIDTH));
      end if;
    end if;
  end process;

--  -----------------------------------------------------------------------------
--  -- test simulation results; not synthesizable. Comment out this section when
--  -- running synthesis.  Uncomment this section if want to use the MATLAB
--  -- script to check CP insertion results.
--  -----------------------------------------------------------------------------
  ---------------------------------------------------------------------------------------------
  -- Write Real and Imginary Components of IFFT Output to Files                                               
--  ---------------------------------------------------------------------------------------------

--  testbench_o : process(clk_in, rst_in_n) is
--    file ro_file    : text open write_mode is "fft_real_output_vhd.txt";
--    variable rdata  : line;
--    variable data_r : integer;
--    file io_file    : text open write_mode is "fft_imag_output_vhd.txt";
--    variable idata  : line;
--    variable data_i : integer;
--  begin
--    if rising_edge(clk_in) and rst_in_n = '1' then
--      if(in_valid_r = '1' and in_ready_r = '1') then
----        data_r := to_integer(signed(d_real));
----        data_i := to_integer(signed(d_imag));
--        data_r := to_integer(signed(in_real_r));
--        data_i := to_integer(signed(in_imag_r));        
--        write(rdata, data_r);
--        writeline(ro_file, rdata);
--        write(idata, data_i);
--        writeline(io_file, idata);
--      end if;
--    end if;
--  end process testbench_o;

  -----------------------------------------------------------------------------
  
end rtl;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一卡2卡3卡4卡| 国产精品久久久一本精品| 欧美videos大乳护士334| 亚洲精品在线免费播放| 国产三级欧美三级日产三级99 | 久久久国产一区二区三区四区小说| 欧美疯狂性受xxxxx喷水图片| 欧美一级艳片视频免费观看| 精品国产网站在线观看| 国产视频一区二区在线| 亚洲国产欧美一区二区三区丁香婷 | 久久久久久久久久久久久久久99| 中文字幕免费不卡| 久久97超碰国产精品超碰| 97se亚洲国产综合在线| 精品88久久久久88久久久| 亚洲在线视频一区| 国产美女精品在线| 日韩欧美国产系列| 亚洲国产精品影院| 日本伦理一区二区| 久久午夜羞羞影院免费观看| 亚洲成人中文在线| 欧美中文字幕久久| 一区二区免费看| 97se狠狠狠综合亚洲狠狠| 久久综合狠狠综合久久综合88 | 久久精品免费在线观看| 久久99蜜桃精品| 日韩精品一区二| 九色porny丨国产精品| 欧美成人伊人久久综合网| 免费高清在线一区| 欧美zozo另类异族| 国产乱子伦一区二区三区国色天香| 91精品国产一区二区三区| 午夜欧美视频在线观看 | 亚洲一二三四区| 91精品久久久久久久99蜜桃| 一区二区三区欧美| 日韩精品最新网址| 国产麻豆成人传媒免费观看| 国产精品乱码人人做人人爱 | 国产精品乱人伦中文| 99精品欧美一区| 青青草国产精品亚洲专区无| 日韩欧美一卡二卡| 波波电影院一区二区三区| 一区二区在线观看av| 欧美久久久久久久久| 成人av在线网| 欧美a一区二区| 亚洲人一二三区| 日韩午夜在线影院| 91一区一区三区| 韩国av一区二区| 亚洲一区二区不卡免费| 久久精品一区二区三区不卡 | 日本 国产 欧美色综合| 国产精品福利在线播放| 国产精品免费人成网站| 日韩一卡二卡三卡| 欧美揉bbbbb揉bbbbb| 国产一区二区伦理| 免费成人你懂的| 一片黄亚洲嫩模| 亚洲视频一区二区在线观看| 久久久不卡网国产精品二区| 欧美精品免费视频| 欧美女孩性生活视频| 欧美日韩三级在线| 在线观看三级视频欧美| 在线观看亚洲成人| 色婷婷精品久久二区二区蜜臀av| 成人短视频下载| 97精品久久久久中文字幕| 国产成人啪免费观看软件| 久草热8精品视频在线观看| 视频一区二区三区中文字幕| 午夜a成v人精品| 日韩高清电影一区| 国产一区二区三区在线观看免费视频| 日韩经典一区二区| 精品在线观看免费| 成人黄色一级视频| 色哟哟一区二区| 欧美日韩免费观看一区二区三区| 日本电影亚洲天堂一区| 7799精品视频| 国产欧美日韩一区二区三区在线观看| 精品国产乱码久久久久久久久| 久久综合五月天婷婷伊人| 成人欧美一区二区三区| 丝袜美腿亚洲综合| 国产电影一区在线| 欧美影院一区二区| 国产欧美一区视频| 中文字幕在线不卡| 亚洲成人免费观看| jlzzjlzz欧美大全| 日韩午夜在线播放| 综合久久久久久| 极品少妇一区二区| 91黄色激情网站| 久久―日本道色综合久久| 国产精品久久久久aaaa樱花| 麻豆成人av在线| 欧美日韩国产乱码电影| 国产日产欧美一区二区三区| 午夜精品成人在线| 欧美最猛性xxxxx直播| 国产欧美一区二区精品忘忧草| 日韩黄色小视频| 欧美日韩二区三区| 亚洲国产精品影院| 91网站最新地址| 亚洲同性gay激情无套| 成人久久久精品乱码一区二区三区 | 精品日韩一区二区三区| 亚洲国产精品自拍| 欧美日韩国产另类一区| 亚洲国产另类精品专区| 欧美在线制服丝袜| 亚洲一区二区成人在线观看| 欧美色图激情小说| 日韩精品每日更新| 欧美影视一区二区三区| 亚洲精品日韩一| 日本道色综合久久| 亚洲一区二区在线视频| 欧美视频一区二区三区在线观看 | 91福利在线免费观看| 国产精品久久午夜| 欧美日韩mp4| 免费成人在线视频观看| 欧美mv日韩mv| 国产91丝袜在线18| 一区二区三区**美女毛片| 欧美亚洲日本国产| 午夜精品福利一区二区三区av | 蜜臀av在线播放一区二区三区| 国产亚洲欧美一区在线观看| 不卡在线观看av| 日本三级韩国三级欧美三级| 国产亚洲欧洲一区高清在线观看| 国产成人精品影视| 亚洲第一综合色| 中文字幕在线观看一区| 欧美一级日韩不卡播放免费| 欧美影院精品一区| 一区二区三区国产精华| 欧美一区二区三区成人| 成人黄页在线观看| 免费看精品久久片| 中文字幕中文乱码欧美一区二区| 欧美视频在线一区二区三区 | 久久久久国色av免费看影院| 99re8在线精品视频免费播放| 男人的天堂亚洲一区| 亚洲一区在线观看免费 | 日本二三区不卡| 91美女福利视频| 91视频观看视频| 午夜精彩视频在线观看不卡| 国产亚洲精品bt天堂精选| 欧美日韩三级一区| 色婷婷国产精品综合在线观看| 激情久久五月天| 蜜臀av国产精品久久久久| 日韩中文欧美在线| 男女视频一区二区| 国产资源在线一区| 激情久久久久久久久久久久久久久久| 日本vs亚洲vs韩国一区三区| 免费久久精品视频| 国产一区二区0| 国产一区二区三区在线观看精品| 国产高清不卡一区| 精品国产1区2区3区| 日韩免费高清电影| 久久一区二区三区国产精品| 亚洲国产成人一区二区三区| 中文字幕中文字幕一区二区| 亚洲在线观看免费视频| 日韩中文字幕91| 粉嫩绯色av一区二区在线观看 | 精品久久久久99| 国产精品国产精品国产专区不蜜 | 91在线视频播放地址| 欧美精品亚洲一区二区在线播放| 欧美大白屁股肥臀xxxxxx| 亚洲人妖av一区二区| 日韩中文字幕区一区有砖一区 | eeuss国产一区二区三区| 91麻豆精品91久久久久同性| 国产欧美久久久精品影院| 夜夜亚洲天天久久| 国产成人欧美日韩在线电影| 欧美日韩国产色站一区二区三区| 国产女主播在线一区二区|