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

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

?? al_unit_spec.vhd

?? 一個8051的VHDL代碼
?? VHD
字號:
--------------------------------------------------
-- Model        :   8051 Behavioral Model,
--                  VHDL Entity mc8051.al_unit.interface
--
-- Author       :   Michael Mayer (mrmayer@computer.org),
--                  Dr. Hardy J. Pottinger,
--                  Department of Electrical Engineering
--                  University of Missouri - Rolla
--
-- Created at   :   09/19/98 20:02:07
--
LIBRARY ieee ;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
LIBRARY mc8051 ;
USE mc8051.cpu_pack.all;
USE mc8051.synth_pack.all;

ENTITY al_unit IS
   PORT( 
      ac : IN     std_logic ;
      alu_cmd : IN     std_logic_vector( 3 DOWNTO 0 )  ;
      bit_loc : IN     std_logic_vector( 2 DOWNTO 0 )  ;
      cpu_rst : IN     std_logic ;
      cy : IN     std_logic ;
      data_alu : IN     std_logic_vector( 2 DOWNTO 0 )  ;
      int_clk : IN     std_logic ;
      ov : IN     std_logic ;
      set_ac_ov : IN     std_logic ;
      set_cy : IN     std_logic ;
      tmp1 : IN     std_logic_vector( 7 DOWNTO 0 )  ;
      tmp1_done : IN     std_logic ;
      tmp2 : IN     std_logic_vector( 7 DOWNTO 0 )  ;
      use_acc_0 : IN     std_logic ;
      use_cy : IN     std_logic ;
      ac_out : OUT    std_logic ;
      alu_result : OUT    std_logic_vector( 7 DOWNTO 0 )  ;
      cmp_true : OUT    std_logic ;
      cy_out : OUT    std_logic ;
      ov_out : OUT    std_logic
   );

-- Declarations

END al_unit ;
--
-- VHDL Architecture mc8051.al_unit.spec
--
-- Created:
--          by - mrmayer.UNKNOWN (eceultra20.ece.umr.edu)
--          at - 23:25:29 09/02/98
--
-- Generated by Mentor Graphics' Renoir(TM) 3.0 (Build 110)
--


-- the organization is such:
--  tmp1 and tmp2 contain two data paramaters to be used,
--  tmp1 may be complemented and will then be converted to unsigned (arith1)
--  tmp2 may likely be the acc and will be converted to unsigned (arith2)
--  ctrl lines will cause these two arith's to be added, (or hence subtracted
--    if 2's complement was takes on tmp1) or logically combined.
--  Bit functions may also be performed.  Flags changed.
--  A comparison will be made between the answer and arith2.
--  The answer will be output to dest.
--  This all happens before done goes high (one clock cycle after rdy
--  goes high - triggered by tmp1_reg).

-- input ports:  alu_cmd(3 DOWNTO 0);   data_alu(2 DOWNTO 0);
--      set_cy
--      set_ac_ov
--      use_cy
--      use_old_flags
--      bit_loc (2 DOWNTO 0);
--      cpl_tmp1

-- output ports
--      test_result
--      result (7 DOWNTO 0);
--      ac_out, ov_out, cy_out, wr_out

architecture spec of al_unit is

    SIGNAL rdy, rdy_clk, done, done_clk : std_logic;

    SIGNAL cy_tmp, ac_tmp, ov_tmp       : std_logic;
    SIGNAL cy_tmp1 : std_logic;
    -- SIGNAL cy_old, ac_old, ov_old       : std_logic;
    SIGNAL bit_instr			    : std_logic;  -- '1' if its a bit instr
    SIGNAL bit1, bit2, bit_ans          : std_logic;
    SIGNAL tmp1_eq_tmp2, bit_to_insert  : std_logic;
    SIGNAL tmp1_with_bit                : std_logic_vector(7 DOWNTO 0);

    -- the parts of answer, separate to get info for ac, cy, ov
    SIGNAL add_en, sub_en               : std_logic;
    SIGNAL arith1_ls, arith2_ls, add_ls : unsigned(4 DOWNTO 0);
    SIGNAL arith1_ms, arith2_ms, add_ms : unsigned(3 DOWNTO 0);
    SIGNAL add_msb                      : std_logic;
    SIGNAL arith_ans                    : unsigned(7 DOWNTO 0);
    SIGNAL tmp1_7_XOR_tmp2_7            : std_logic;

    -- signals for the pre-processing to occur on the temp registers
    SIGNAL tmp1_post, tmp2_post         : std_logic_vector(7 DOWNTO 0);
    SIGNAL tmp1_2, tmp1_3               : unsigned(7 DOWNTO 0);

begin

------------------- BEGIN HANDSHAKING and CONTROL PROCESSING
   -- The following are flip - flops
   -- rdy is set on a clock edge after it receives tmp1_done
--   rdy_clk <= tmp1_done AND int_clk;
-- 
--   rdy <= '0' WHEN done = '1' OR cpu_rst = '1' ELSE
--          '1' WHEN rising_edge(rdy_clk) ELSE
--          rdy;
--
--   -- alu_done is set one clock cycle after rdy (delayed just to be safe)
--   done_clk <= rdy AND int_clk;
--   done <= '0' WHEN cpu_rst = '1' ELSE
--           '1' WHEN rising_edge(done_clk) ELSE
--           done;
--
--   alu_done <= done;

-------------- DETERMINE THE ANSWER HERE
   -- assign the answer to the output port result
   alu_result <= tmp1_post                           WHEN alu_cmd = pass_tmp1 ELSE
                 tmp2_post                           WHEN alu_cmd = pass_tmp2 ELSE
                 tmp2_post                           WHEN alu_cmd = rotate    ELSE
                 tmp1_with_bit                       WHEN bit_instr = '1'     ELSE
                 std_logic_vector(arith_ans);

------------- BEGIN PRE OPERAND PROCESSING
   -- first decide to complement the temp1 register
   tmp1_2 <= unsigned(NOT tmp1) WHEN std_match(data_alu,t1_cpl_val) ELSE
             unsigned(tmp1);

   -- second perform any necessay inc / dec
   tmp1_3 <= tmp1_2 + 1 WHEN std_match(data_alu,t1_inc_val) ELSE
             tmp1_2 - 1 WHEN std_match(data_alu,t1_dec_val) ELSE
             tmp1_2;

   -- third, decide if need to use cpl, inc/dec, swap, or just plain tmp1
   tmp1_post <= tmp1(7 DOWNTO 4) & tmp2(3 DOWNTO 0) WHEN std_match(alu_cmd,xchd1) ELSE
                std_logic_vector(tmp1_3)            WHEN std_match(alu_cmd,std_alu_data) ELSE
                tmp1;

------------- BEGIN BIT STUFF
   bit_instr <= '1' WHEN std_match(alu_cmd,"11--") ELSE '0';

   -- use a selector to get the corret bit for bit1
   bit1 <= cy      WHEN use_cy = '1'    ELSE
           tmp1(0) WHEN bit_loc = "000" ELSE
           tmp1(1) WHEN bit_loc = "001" ELSE
           tmp1(2) WHEN bit_loc = "010" ELSE
           tmp1(3) WHEN bit_loc = "011" ELSE
           tmp1(4) WHEN bit_loc = "100" ELSE
           tmp1(5) WHEN bit_loc = "101" ELSE
           tmp1(6) WHEN bit_loc = "110" ELSE
           tmp1(7) WHEN bit_loc = "111" ELSE
           'X';

   -- bit2 is input to the bit operator, and equal bit1 or /bit1
   -- cpl bit1 if cpl_bit_logic
   bit2    <=  NOT bit1 WHEN std_match(alu_cmd,cpl_bit_logic) ELSE bit1;  

   -- perform bit operations
   bit_ans <= bit2 AND cy WHEN std_match(data_alu,anl_instr) ELSE -- anl instr
              bit2 OR cy  WHEN std_match(data_alu,orl_instr) ELSE -- orl instr
              bit2;

   bit_to_insert <= '0'         WHEN alu_cmd = clr_bit ELSE
                    '1'         WHEN alu_cmd = set_bit ELSE
                    bit_ans;

   -- figure out where the bit gets inserted
   tmp1_with_bit(0) <= bit_to_insert WHEN bit_loc = "000" ELSE tmp1(0);
   tmp1_with_bit(1) <= bit_to_insert WHEN bit_loc = "001" ELSE tmp1(1);
   tmp1_with_bit(2) <= bit_to_insert WHEN bit_loc = "010" ELSE tmp1(2);
   tmp1_with_bit(3) <= bit_to_insert WHEN bit_loc = "011" ELSE tmp1(3);
   tmp1_with_bit(4) <= bit_to_insert WHEN bit_loc = "100" ELSE tmp1(4);
   tmp1_with_bit(5) <= bit_to_insert WHEN bit_loc = "101" ELSE tmp1(5);
   tmp1_with_bit(6) <= bit_to_insert WHEN bit_loc = "110" ELSE tmp1(6);
   tmp1_with_bit(7) <= bit_to_insert WHEN bit_loc = "111" ELSE tmp1(7);

   tmp1_eq_tmp2 <= '1' WHEN std_match(tmp1_post,tmp2_post) ELSE '0';

   cmp_true <= bit_ans      WHEN bit_instr = '1' ELSE  -- for JB, JNB, JC, JBC, etc.
                  tmp1_eq_tmp2 WHEN std_match(alu_cmd,compare_1_2) ELSE  -- for JZ
                  NOT tmp1_eq_tmp2;            -- for JNZ, DJNZ, CJNE

------------- END BIT STUFF
   
------------- BEGIN ARITHMATIC & LOGIC
   arith1_ls <= unsigned('0' & tmp1(3 DOWNTO 0));
   arith2_ls <= unsigned('0' & tmp2(3 DOWNTO 0));
   arith1_ms <= unsigned('0' & tmp1(6 DOWNTO 4));
   arith2_ms <= unsigned('0' & tmp2(6 DOWNTO 4));
   -- FULL ADDER WITH AC, OV, AND CY INFO
   -- add first 4 bits and store ac
   add_ls <= arith2_ls + arith1_ls;
   -- need to complement the ac if it is a subtraction
   ac_tmp <= NOT add_ls(4) WHEN std_match(data_alu,t1_cpl_val) ELSE
             add_ls(4);
   -- add next 3 bits (to get ov info)
   add_ms <= (arith2_ms + arith1_ms) + ("000" & add_ls(4));
   -- find the msb
   tmp1_7_XOR_tmp2_7 <= tmp1(7) XOR tmp2(7);
   add_msb <= tmp1_7_XOR_tmp2_7 XOR add_ms(3);
   -- find the carry bit 
   cy_tmp1 <= (tmp1_7_XOR_tmp2_7 AND add_ms(3)) OR 
             (tmp1(3) AND tmp2(3));
   cy_tmp  <= NOT cy_tmp1  WHEN std_match(data_alu,t1_cpl_val) ELSE
              cy_tmp1;

   -- ov represents (carry from bit 6 to 7) XOR (cy);
   ov_tmp  <= cy_tmp XOR add_ms(3);
   ---- mmayer is ov correct?  I think so.

   -- mimic the arithmatic and logic units   
   arith_ans <= add_msb & add_ms(2 DOWNTO 0) & add_ls(3 DOWNTO 0)
                                  WHEN std_match(alu_cmd ,add_instr) ELSE
                unsigned(tmp1_post) AND unsigned(tmp2_post) WHEN std_match(data_alu,anl_instr) ELSE
                unsigned(tmp1_post) OR  unsigned(tmp2_post) WHEN std_match(data_alu,orl_instr) ELSE
                unsigned(tmp1_post) XOR unsigned(tmp2_post) WHEN std_match(data_alu,xrl_instr) ELSE
                NOT unsigned(tmp2_post)        WHEN std_match(data_alu,cpl_instr) ELSE
                unsigned(tmp2_post);


   -- need to do mul and div and da

------------- END ARITHMATIC & LOGIC

   -- write bits to psw
   cy_out <= bit_ans    WHEN (bit_instr AND set_cy) = '1'   ELSE
             cy_tmp     WHEN set_cy = '1'     ELSE
             cy;
   ac_out <= ac_tmp     WHEN set_ac_ov = '1'  ELSE
             ac;
   ov_out <= ov_tmp     WHEN set_ac_ov = '1'  ELSE
             ov;
   -- WHAT IS THIS NEXT LINE FOR?  -- mrmayer
   -- wr_out <= done;
                          
end architecture spec;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久中文字幕综合网| 欧美zozo另类异族| 日韩欧美一二三四区| 亚洲精品在线网站| 亚洲国产日日夜夜| 成人午夜精品一区二区三区| 91精品综合久久久久久| 国产三级精品视频| 秋霞电影一区二区| 色婷婷av一区二区三区gif| 国产亚洲美州欧州综合国| 午夜精品福利视频网站| 91免费看视频| 国产女人18水真多18精品一级做| 肉色丝袜一区二区| 91久久奴性调教| 国产精品国产成人国产三级| 精品在线视频一区| 日韩欧美精品在线视频| 亚洲午夜精品久久久久久久久| 成人亚洲一区二区一| 精品免费视频一区二区| 亚洲福利视频一区| 懂色av一区二区三区蜜臀| 欧美日韩你懂得| 国产精品网站一区| 亚洲一区二区免费视频| 国产精品自拍三区| 欧美日韩中字一区| 亚洲人精品一区| 国产精品亚洲成人| 91精品国产综合久久久久久| 日韩理论片网站| 成人激情校园春色| 欧美二区三区91| 亚洲高清不卡在线| 在线观看成人小视频| 国产精品久久久99| 国产成人av一区| 亚洲精品一区二区在线观看| 香蕉久久夜色精品国产使用方法 | 国产精品自在在线| 欧美一区欧美二区| 香蕉成人伊视频在线观看| 91在线视频在线| 国产精品三级电影| 成人av资源下载| 亚洲国产精品99久久久久久久久 | 一区二区三区在线观看视频| 国产99久久精品| xnxx国产精品| 国产乱码精品1区2区3区| 欧美一区二区三区啪啪| 成人免费小视频| 91丨国产丨九色丨pron| 亚洲视频一二三区| 91原创在线视频| 一区二区三区高清| 欧美视频在线播放| 丝袜美腿亚洲综合| 6080yy午夜一二三区久久| 午夜精品福利久久久| 欧美日韩高清影院| 久久99久久久欧美国产| 亚洲精品一区二区三区四区高清| 久久99国产精品尤物| 久久人人97超碰com| 成人性生交大合| 亚洲黄色小说网站| 色婷婷综合五月| 久久国产精品无码网站| 国产欧美日韩综合| 一本在线高清不卡dvd| 婷婷开心激情综合| 久久久久久久久久电影| 成人黄色在线视频| 一区二区三区在线免费视频| 欧美视频第二页| 韩国在线一区二区| 亚洲视频一区在线| 日韩欧美在线123| 国产98色在线|日韩| 亚洲精品亚洲人成人网| 欧美一级高清片| 国产成+人+日韩+欧美+亚洲| 亚洲精品成人a在线观看| 69堂成人精品免费视频| 国产成人啪午夜精品网站男同| 国产午夜亚洲精品不卡| 国产在线播放一区| 国产精品福利一区二区| 色婷婷综合中文久久一本| 香港成人在线视频| 久久久久久免费毛片精品| av亚洲精华国产精华| 偷拍日韩校园综合在线| 中文字幕巨乱亚洲| 678五月天丁香亚洲综合网| 国产成人精品免费一区二区| 亚洲狠狠爱一区二区三区| 26uuu国产一区二区三区| 色婷婷综合久久久久中文 | 亚洲三级在线观看| 欧美成人免费网站| 欧美色手机在线观看| 国产精品自在在线| 日韩精品久久久久久| 亚洲欧洲一区二区三区| 日韩精品综合一本久道在线视频| 一本大道av一区二区在线播放| 精品在线免费观看| 亚洲影视资源网| 亚洲天天做日日做天天谢日日欢| 日韩精品在线看片z| 在线亚洲免费视频| 成人激情av网| 国产成人一级电影| 国产一区欧美二区| 首页国产丝袜综合| 亚洲永久精品国产| 亚洲卡通动漫在线| 国产精品嫩草99a| 欧美精品丝袜中出| 91在线高清观看| 国产福利精品一区二区| 一区二区三区精密机械公司| 久久久亚洲综合| 欧美精品久久天天躁| 91丨九色porny丨蝌蚪| 99re这里只有精品6| 免费成人你懂的| 日本亚洲欧美天堂免费| 亚洲国产精品天堂| 亚洲午夜三级在线| 亚洲一区二区av在线| 亚洲人成网站精品片在线观看| 国产精品嫩草影院av蜜臀| 国产欧美日韩综合精品一区二区| 久久久久久久久久久电影| 日韩精品一区二区三区在线播放| 69堂成人精品免费视频| 91精品国产综合久久久久久久| 欧美日韩高清不卡| 欧美一级一级性生活免费录像| 91福利国产成人精品照片| 一本久久a久久免费精品不卡| youjizz久久| 一本一本大道香蕉久在线精品| 一本久久a久久免费精品不卡| 色婷婷精品久久二区二区蜜臀av| 91免费观看视频在线| 色av综合在线| 6080亚洲精品一区二区| 精品99一区二区| 国产精品久久二区二区| 亚洲综合偷拍欧美一区色| 亚洲v中文字幕| 国精产品一区一区三区mba视频| 国产一区二区在线观看免费| 国产电影精品久久禁18| 99re在线视频这里只有精品| 成人午夜激情影院| 91年精品国产| 欧美日韩国产经典色站一区二区三区| 欧美精品一区二区三区高清aⅴ | 94-欧美-setu| 欧美午夜一区二区| 国产亚洲一区字幕| 亚洲免费av网站| 久久99国产精品麻豆| 国产成人免费网站| 91福利社在线观看| 久久综合九色综合欧美98| 亚洲日本在线a| 美女免费视频一区| 色综合久久精品| 精品国产乱码久久久久久影片| 亚洲特黄一级片| 亚洲午夜电影网| 麻豆成人久久精品二区三区红| 国产美女在线观看一区| 色综合天天综合色综合av | 欧美在线小视频| 26uuu亚洲综合色欧美| 一区二区在线观看免费| 精品一区二区三区免费视频| 丁香婷婷综合色啪| 欧美色图片你懂的| 国产欧美日韩麻豆91| 精品在线免费视频| 欧美日韩aaa| 亚洲激情中文1区| 国产成人免费av在线| 欧美男男青年gay1069videost | 欧美日韩国产另类不卡| 亚洲欧洲日韩女同| 国产v日产∨综合v精品视频| 日韩一区二区三区在线观看| 一区二区三区91| 成人福利视频网站|