Presentation is loading. Please wait.

Presentation is loading. Please wait.

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

Similar presentations


Presentation on theme: "НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ"— Presentation transcript:

1 НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИСТЕТ Схемотехника ЭВМ ч.2 Лекция №2. Особенности языков описания аппаратуры AHDL, VerilogHDL, VHDL Мальчуков Андрей Николаевич Томск – 2014

2 HDL – языки описания аппаратуры
AHDL – Altera HDL. Разработан фирмой Altera. Сфокусирован на описание элементов на базе примитивов – абстракций элементов реальной платформы, для которой пишется описание. Можно использовать только для устройств фирмы Altera. VHDL - англ. VHSIC (Very high speed integrated circuits) Hardware Description Language - "язык аппаратного описания для быстродействующих интегрированных цепей". Создан по заказу Пентагона как и ADA. Нет ограничение на использование. Verilog HDL – другой открытый и бурно развивающий стандарт. Нет ограничение на использование. 2 2

3 Входы/выходы AHDL CLK : INPUT; INSTR_DATA[7..0]: INPUT;
REFRESH : OUTPUT; INSTR[7..0] : OUTPUT; Verilog input CLK, input [7:0] INSTR_DATA, output reg REFRESH = 0, output reg [7:0] INSTR = 0, output LCD_STATE output [3:0] INIT_STATE, VHDL CLK: in std_logic; INSTR_DATA: in std_logic_vector (7 downto 0); SBUSY: in boolean; DELAY: out natural range 0 to 2**28-1; ONE_CYCLE: out std_logic; INIT_STATE_OUT: out std_logic_vector (3 downto 0); 3 3

4 AHDL: инициализация I/O (вх/вых) регистры – набор триггеров
DELAY[27..0] : DFFE; REFRESH : DFF; DATA_OUT[3..0] : DFF; LED[8..0] : NODE; led_reg[8..5] : DFFE; DELAY[27..0].clk = CLK; REFRESH.clk = CLK; DATA_OUT[3..0].clk = CLK; led_reg[].clk = CLK; LED[4..0] = NOT lcd_state_reg[]; LED[8..5] = NOT led_reg[]; 4 4

5 Verilog: регистры и провода
reg lcd_state = 0; reg [3:0] init_state = 0; reg [3:0] exec_state = 0; wire MAIN_ST_SIG = main_state > 0 && main_state < 7 ? 1'b1 : 1'b0; assign INIT_STATE = ~init_state; assign EXEC_STATE = ~exec_state; assign LCD_STATE = ~lcd_state; output [3:0] INIT_STATE, output [3:0] EXEC_STATE, output LCD_STATE 5 5

6 VHDL: переменные VHDL variable init_state_reg : std_logic_vector (3 downto 0); variable epw : natural range 0 to 25; variable first_cycle : natural range 0 to 1; variable lcd_state_reg : std_logic; INIT_STATE_OUT <= not init_state_reg; EXEC_STATE_OUT <= not exec_state_reg; LCD_STATE_OUT <= not lcd_state_reg; 6 6

7 A-Ver-V -HDL: константы
AHDL CONSTANT str_high = X" "; CONSTANT str_low = X"205045A3A54D203C E205045A3A54D203C E205045A3A54D203C E20"; Verilog parameter str_high = " "; parameter str_low = {" PE",8'hA3,8'hA5,"M"," <TECT>"," PE",8'hA3,8'hA5,"M"," <TECT>"," PE",8'hA3,8'hA5,"M"," <TECT> "}; VHDL constant str_high : std_logic_vector (319 downto 0) := X" "; 7 7

8 A-Ver-V -HDL: работа с регистрами
AHDL DFFE: led_reg[].ena = VCC; led_reg[] = X"1"; DFF: WRITE_COMMAND = B"1"; Verilog INSTR <= 8'b0011_XXXX; DELAY <= 28'h2625A00; ONE_CYCLE <= 1'b1; WRITE_COMMAND <= 0; VHDL INSTR <= B"0011_0000"; DELAY <= 16#2625A00#; ONE_CYCLE <= '1'; init_state_reg := X"0"; 8 8

9 A-Ver-V -HDL: IF (условный оператор)
AHDL IF (SBUSY == B"0") THEN IF (delay_command[] == DELAY[]) THEN IF (char_cnt[] == X"28") Verilog if (!SBUSY && !RESET) begin if (delay_command == DELAY) if (char_cnt == 39) VHDL if (SBUSY) then | if (not SBUSY) then if ((ONE_CYCLE = '1') or (ONE_CYCLE = '0' and first_cycle = 0)) then if (delay_command = DELAY) then 9 9

10 A-Ver-V -HDL: CASE (автомат)
AHDL command_state : MACHINE OF BITS(cmd_state_reg[1..0]) WITH STATES(s0 = X"00", s1 = X"01", s2 = X"02", s3 = X"03"); command_state = s1; CASE command_state IS WHEN s0 => Verilog reg [2:0] command_state; command_state <= 1; case (command_state) 0: begin VHDL type state_type is (s0, s1, s2, s3); signal command_state : state_type; command_state <= s1; case command_state is when s0 => 10 10

11 A-Ver-V -HDL: тактирование
AHDL Передний фронт – в CASE (MACHINE OF BITS) Verilog CLK) begin CLK) begin VHDL if (rising_edge(CLK)) then if (falling_edge(CLK)) then 11 11

12 VHDL: преимущества VHDL
OUT_BYTE <= buffer_bytes (7 + 8*send_cnt downto 8*send_cnt); buffer_bytes(7 + 8*receive_cnt downto 8*receive_cnt) := IN_BYTE; RXD <= BYTE (bit_cnt - 1); 12 12

13 AHDL: деление AHDL Нет оператора деления.
Необходимо использовать мегафункцию QuartusII -> Divide. 13 13

14 Структурно-функциональная схема

15 НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИСТЕТ Схемотехника ЭВМ ч.2 Лекция №2. Особенности языков описания аппаратуры AHDL, VerilogHDL, VHDL Мальчуков Андрей Николаевич Томск – 2014


Download ppt "НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ"

Similar presentations


Ads by Google