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

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

?? spi_master_tb.vhd

?? SPI.zip
?? VHD
?? 第 1 頁 / 共 3 頁
字號:
                go <= '0';
                wait until uc_done = '1';
                            
                -- continue reading status register until bus busy negates
                while data_in(BUS_BUSY_BIT) = '1' loop
                    write <= '0';
                    uc_addr <= BASE_ADDR & SPISR_ADDR;
                    go <= '1';
                    wait until clk'event and clk='1';
                    wait until clk'event and clk='1';
                    go <= '0';
                    wait until uc_done = '1';
                end loop;
                
            end loop;   -- end loop for CPHA, CPOL
        end loop;       -- end loop for CLKDIV

wait;

end process;

-- *********************************** uC Process *********************************
--  Synthesize uProc bus protocol
UCBUS: process
begin

    -- Set up defaults
    uc_done <= '1';
    ad_oe <= '0';
    ale_n <= '1';
    psen_n <= '1';
    addr <= (others => '0');
    ad_out <= (others => '0');
    data_in_ce <= '0';
    wr_n <= '1';
    rd_n <= '1';
    
    -- Wait for go to assert
    wait until go'event and go = '1';
    
    -- start bus cycle
    uc_done <= '0';
    
    -- wait part of ALE_N negation cycle (ALE_N pulse width - address setup time)
    wait for TLHLL - TAVLL;
    
    -- setup address on busses
    addr <= uc_addr(15 downto 8);
    ad_out <= uc_addr(7 downto 0);
    ad_oe <= '1';
    
    -- wait address setup time then assert ALE_N
    wait for TAVLL;
    ale_n <= '0';
    
    
    
    -- determine if this is a program store cycle, write cycle, or read cycle
    if assert_psen = '1' then
        -- program store cycle
    
        -- wait before asserting PSEN_N
        wait for TLLPL;
        psen_n <= '0';
        
        -- wait address hold time then tri-state
        wait for TPLAZ;
        ad_oe <= '0';       -- tri-state ad bus
        
        -- wait for instruction access time then capture data
        -- by asserting clock enable for input data register
        wait for TPLIV;
        data_in_ce <= '1';
        
        -- wait remainder of PSEN_N pulse width then negate PSEN_N and ALE_N
        -- and negate clock enable for input data register
        wait for TPLPH - TPLIV;
        psen_n <= '1';
        ale_n <= '1';
        data_in_ce <= '0';
    
    elsif write = '1' then
        -- write cycle
        -- wait address hold time
        wait for TLLAX;
        
        -- write cycle, put data on ad
        ad_oe <= '1';
        ad_out <= uc_data;
        
        -- wait data setup time then assert WR_N
        wait for TQVWX;
        wr_n <= '0';
        
        -- wait write pulse width then negate WR_N
        wait for TWLWH;
        wr_n <= '1';
        
        -- wait data hold time after WR_N then remove data
        wait for TWHQX;
        ad_oe <= '0';
        
        -- wait remaining ALE_N hold time after WR_N then negate ALE_N
        wait for TWHLH - TWHQX;
        ale_n <= '1';
    
    else
        -- read cycle
        -- wait address hold time
        wait for TLLAX;
        ad_oe <= '0';
        
        -- read cycle, wait address Z time before asserting RD_N
        wait for TRLAZ;
        rd_n <= '0';
        
        -- wait for data to be valid, then capture it
        -- by asserting clock enable for input data register
        wait for TRLDV;
        data_in_ce <= '1';
        
        -- wait remainding time in read pulse then negate RD_N
        -- by negating clock enable for input data register 
        wait for TRLRH - TRLDV;
        rd_n <= '1';
        data_in_ce <= '0';
        
        -- wait ALE_N hold time then negate ALE_N;
        wait for TWHLH;
        ale_n <= '1';
    end if;
    
    -- signify end of bus cycle by asserting UC_DONE
    uc_done <= '1';
    
    -- process will now return to beginning to wait for GO
end process;

-- *********************************** Input Register Process *********************************
-- This process captures data from the ADDR_DATA bus during read and program store bus cycles
-- Data is clocked into the register when the clock enable is asserted from the uC bus cycle
-- process
INPUT_REGS: process(reset, clk)
begin
    if reset = RESET_ACTIVE then
        data_in <= (others => '0');
    elsif clk'event and clk = '1' then
        if data_in_ce = '1' then
            data_in <= addr_data;
        else
            data_in <= data_in;
        end if;
    end if;
end process;

-- *********************************** SS_IN_N Process *********************************
-- This process will asynchronously assert SS_IN_N as determined by the constant SS_IN_ASSERT_TIME.
-- If this time is set to 0, then SS_IN_N will never be asserted. This allows the testbench to be
-- run without interference of this signal
SS_IN_PROC: process

begin
    ss_in_n <= '1';
    if SS_IN_ASSERT_TIME = 0 uS then
        wait;
    else
        wait for SS_IN_ASSERT_TIME;
        ss_in_n <= '0';
        wait for SS_IN_ASSERT_TIME;
        ss_in_n <= '1';
        wait;
    end if;
end process;    

-- *********************************** SPI Slave Processes *********************************
-- This process will "mock-up" an SPI slave. A shift register will be pre-loaded with a constant.
-- MOSI will be shifted in and MISO will be shifted out. An additional register will be loaded
-- with the SPI shifted in data just for verification purposes. 
-- For now, this process will use the edge of SCK specified by SLAVE_CPHA and SLAVE_CPOL
--
--  SLAVE_CPHA  SLAVE_CPOL  slave_clkedge (to input data, opposite edge used to output)
--  ----------  ----------  -------------
--  0       0       1
--  0       1       0
--  1       0       0
--  1       1       1
-- 
slave_clkedge <= '1' when SLAVE_CPHA = SLAVE_CPOL
          else '0';
          
-- Define a 3-bit counter to count SCK edges and data into register so that parallel
-- register is loaded. Use same clock edge that is used to input data
SLAVE_IN_CNTR: process(sck, reset)
begin  
          -- Clear output register
          if (reset = RESET_ACTIVE) then
           slave_cnt_int <= (others => '0');
           
      -- On SLAVE_CLKEDGE edge of clock count
      elsif sck'event and sck = slave_clkedge then
        if ss_n /= ALL_ONES then
                slave_cnt_int <= slave_cnt_int + 1;
        end if;
      end if;

end process;

slave_cnt <= STD_LOGIC_VECTOR(slave_cnt_int);

-- Count bits going out to help control mux for MISO data
-- This count is on the same edge as data being output
SLAVE_OUT_CNTR: process(sck, reset)
begin  
          -- Clear output register
          if (reset = RESET_ACTIVE) or ss_n = ALL_ONES then
           slave_outcnt_int <= (others => '0');
           
      -- On SLAVE_CLKEDGE edge of clock count
      elsif sck'event and sck = not(slave_clkedge) then
                slave_outcnt_int <= slave_outcnt_int + 1;
      end if;

end process;

slave_outcnt <= STD_LOGIC_VECTOR(slave_outcnt_int);


-- Define an 8-bit shift register for shifting in MOSI and shifting out MISO
-- Preset register to CE
SLAVE_SHFTREG: process(sck, reset)
begin
          if (reset = RESET_ACTIVE) then
           slave_data <= CE;
           
      -- On SLAVE_CLKEDGE edge of spi clock, shift in data
      elsif sck'event and sck = slave_clkedge then
            -- Shift the data if SS_N is asserted
            if ss_n /= ALL_ONES then
                slave_data <= slave_data(6 downto 0) & mosi;
            end if;

      end if;

end process;
-- MISO will be shifted out using opposite edge of clock
-- If CPHA=1 then first sck edge clocks out first data
MISO_REG_PROC: process(sck, reset)
begin
    if reset = RESET_ACTIVE then
        miso_reg <= '0';
    elsif sck'event and sck = not(slave_clkedge) then
        miso_reg <= slave_data(7);
    end if;
end process;

-- If CPHA=0, falling edge of SS_N clocks out first data
-- NOTE: A gated clock is described here ONLY for test purposes
            
ssn_ck <= '1' when ss_n /= ALL_ONES
            else '0';
            
MISO_REG_SSN_PROC: process(ssn_ck, reset)
begin
    if reset = RESET_ACTIVE then
        miso_reg_ssn <= '0';
    elsif ssn_ck'event and ssn_ck = '1' then
                miso_reg_ssn <= slave_data(7);
    end if;
end process;

miso <= miso_reg_ssn when SLAVE_CPHA = '0' and slave_outcnt = "000"
      else miso_reg;

-- Define an 8-bit parallel load register that holds data received from the SPI bus
SLAVE_RCVREG: process(clk, reset)
begin
    if (reset = RESET_ACTIVE) then
        slave_rcvdata <= (others => '0');
    elsif clk'event and clk = '1' then
        if slave_cnt = "000" then
            slave_rcvdata <= slave_data;
        else
            slave_rcvdata <= slave_rcvdata;
        end if;
    end if;
end process;

    

END;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频图片小说| 欧美激情一区二区三区全黄| 亚洲一二三四在线| 欧美日韩免费不卡视频一区二区三区| 亚洲欧美另类小说| 欧美日韩午夜影院| 免费观看成人av| 精品国产一区二区亚洲人成毛片 | 91丨porny丨户外露出| 中文字幕人成不卡一区| 欧美在线免费观看亚洲| 日韩精品1区2区3区| 精品噜噜噜噜久久久久久久久试看 | 色94色欧美sute亚洲线路一ni| 亚洲视频在线一区| 欧美日韩国产精品成人| 狠狠色2019综合网| 亚洲欧美日韩精品久久久久| 欧美日韩大陆在线| 国产成人免费在线| 亚洲一区二区三区四区在线| 欧美成人女星排行榜| 成人av综合在线| 婷婷一区二区三区| 欧美国产一区二区在线观看| 在线视频综合导航| 国产麻豆视频一区| 国内精品视频666| 夜夜操天天操亚洲| 久久亚区不卡日本| 精品视频一区二区不卡| 国产露脸91国语对白| 亚洲精品高清视频在线观看| 精品欧美乱码久久久久久1区2区| 91在线无精精品入口| 久久99精品国产91久久来源| 亚洲视频香蕉人妖| 欧美刺激午夜性久久久久久久| 波多野结衣在线一区| 奇米一区二区三区av| 亚洲欧美一区二区久久| k8久久久一区二区三区| 免费看欧美女人艹b| 亚洲另类春色国产| 国产丝袜美腿一区二区三区| 欧美日韩中文字幕一区二区| 丁香六月久久综合狠狠色| 无码av免费一区二区三区试看| 国产精品国产三级国产aⅴ中文 | 久久久久久99久久久精品网站| 色拍拍在线精品视频8848| 国产美女在线精品| 日韩电影网1区2区| 亚洲香肠在线观看| 亚洲婷婷综合色高清在线| 久久奇米777| 日韩欧美国产午夜精品| 欧洲中文字幕精品| 色综合欧美在线视频区| www..com久久爱| 国产超碰在线一区| 国产精品一区免费在线观看| 久久精品国产77777蜜臀| 午夜视频一区在线观看| 亚洲尤物在线视频观看| 亚洲欧美日韩国产中文在线| 国产精品美女久久久久久久久久久| 久久伊99综合婷婷久久伊| 日韩精品一区二区三区三区免费| 欧美夫妻性生活| 91精品欧美综合在线观看最新| 欧美视频一区在线观看| 欧美天堂一区二区三区| 欧美吻胸吃奶大尺度电影| 欧美性生活大片视频| 欧美日韩精品一区二区三区四区| 91成人免费网站| 91激情五月电影| 欧美午夜片在线观看| 欧美视频自拍偷拍| 91麻豆精品国产91久久久资源速度| 欧美日韩激情在线| 欧美一区二区三区四区高清 | 91热门视频在线观看| 99久久综合精品| 色吧成人激情小说| 精品视频在线免费看| 91.成人天堂一区| 日韩三级免费观看| 久久久久久综合| 国产精品电影一区二区三区| 亚洲美女在线国产| 丝袜国产日韩另类美女| 麻豆成人在线观看| 国产精品99久久久久久宅男| 成人sese在线| 欧美日韩亚州综合| 精品久久久久久久久久久久包黑料| 精品免费日韩av| 亚洲欧洲在线观看av| 亚洲福利视频导航| 久久草av在线| 99久久精品国产导航| 欧美日韩一区二区在线观看视频| 欧美一区二区三区免费观看视频 | 日韩欧美国产系列| 欧美激情一区二区三区四区| 亚洲日本一区二区三区| 视频在线观看91| 国产精品一区三区| 欧美影院一区二区| 久久久精品综合| 一区二区三区成人| 狠狠色2019综合网| 在线观看视频91| 久久亚洲私人国产精品va媚药| 亚洲欧美成aⅴ人在线观看| 全国精品久久少妇| 97久久超碰国产精品| 日韩一区二区免费在线观看| 亚洲欧洲精品天堂一级| 日韩高清不卡在线| 99九九99九九九视频精品| 欧美精品色综合| 中文字幕亚洲精品在线观看| 男女视频一区二区| 色中色一区二区| 国产日韩欧美a| 日日夜夜免费精品| 色视频成人在线观看免| 久久久久久亚洲综合影院红桃| 亚洲第一av色| 成人白浆超碰人人人人| 精品伦理精品一区| 日本怡春院一区二区| 91丝袜高跟美女视频| 久久欧美一区二区| 青青草国产精品97视觉盛宴| 色婷婷久久久综合中文字幕 | 欧美高清视频在线高清观看mv色露露十八 | 国产露脸91国语对白| 欧美日高清视频| 亚洲三级久久久| 成人免费看黄yyy456| 精品理论电影在线观看| 日一区二区三区| 欧美影视一区二区三区| 亚洲欧美日韩国产综合在线| 成人视屏免费看| 久久久91精品国产一区二区精品| 日本欧美在线观看| 欧美日韩一区二区三区高清| 亚洲女人****多毛耸耸8| 不卡区在线中文字幕| 中文字幕av一区二区三区高| 韩国精品久久久| 欧美变态口味重另类| 男人的j进女人的j一区| 日韩一区二区在线观看| 日韩精品三区四区| 欧美精品成人一区二区三区四区| 尤物在线观看一区| 91久久一区二区| 有码一区二区三区| 欧洲av在线精品| 亚洲国产中文字幕在线视频综合| 色视频欧美一区二区三区| 1区2区3区国产精品| 99国产精品99久久久久久| 一区在线观看视频| 一本大道av伊人久久综合| 亚洲人亚洲人成电影网站色| 99精品视频中文字幕| 亚洲啪啪综合av一区二区三区| 91色乱码一区二区三区| 亚洲自拍偷拍综合| 在线不卡欧美精品一区二区三区| 天天综合网天天综合色| 日韩欧美资源站| 国产综合久久久久久鬼色 | 国产欧美日韩精品一区| 国产精品一区二区男女羞羞无遮挡| 久久久久久亚洲综合影院红桃 | 亚洲少妇中出一区| 日本精品视频一区二区| 亚洲高清一区二区三区| 欧美一区二区日韩| 国产高清精品在线| 国产精品传媒入口麻豆| 色一情一乱一乱一91av| 肉肉av福利一精品导航| 久久久影视传媒| av日韩在线网站| 午夜精品久久久久久久99水蜜桃 | 日韩三级中文字幕| 国产精品99久久久久| 亚洲视频中文字幕| 日韩亚洲欧美中文三级| 国产jizzjizz一区二区| 夜夜夜精品看看|