J
jshroff
Guest
Hi All,
Jeg forsøger at lære VHDL bruger en digilent bord og eksempel og har en meget grundlæggende spørgsmål.
Koden er ...Code:-------------------------------------------------- --------------------------------
- Firma: Digilent Inc.
- Ingeniør: Claudia Goga
--
- Opret Dato: 22:33:35 11/25/06
- Modul Navn: PS2_Reader - Behavioral
- Målenheder: CoolRunner2 CPLD
- Tool versioner: Xilinx ISE v7.1i
- Beskrivelse:
- Dette modul hedder scanne koder fra PS2 Port.
Hver gang en
- Nye scanne koden er helt modtaget det mulighed for at fRd signal til en
- Vigtigste ur periode.
--
- Revision 0.01 - File Created
- Yderligere kommentarer:
--
-------------------------------------------------- --------------------------------library IEEE;
brug IEEE.STD_LOGIC_1164.ALL;
brug IEEE.STD_LOGIC_ARITH.ALL;
brug IEEE.STD_LOGIC_UNSIGNED.ALL;enhed PS2_Reader er
Port (mclk: i std_logic; - systemuret
PS2C: i std_logic; - PS2 Ur
PS2D: i std_logic; - PS2 data
RST: i std_logic; - Nulstil BTN0
Ps2Dout: out std_logic_vector (7 downto 0); - ud data
fRd: out std_logic); - data gyldig flag
udgangen PS2_Reader;architecture Behavioral af PS2_Reader er-------------------------------------------------- ----------------------
- SIGNAL og konstant ERKLÆRINGER
-------------------------------------------------- ----------------------
- Konstanterne nedenfor definere state koderne for PS2 Keyboard
- læseren ved at bruge en HOT kodning.konstant tomgang: std_logic_vector (5 downto 0): = "000000";
konstant shift_data: std_logic_vector (5 downto 0): = "000001";
konstant check_parity: std_logic_vector (5 downto 0): = "000010";
konstant check_stopbit: std_logic_vector (5 downto 0): = "000100";
konstant frame_error: std_logic_vector (5 downto 0): = "001000";
konstant parity_error: std_logic_vector (5 downto 0): = "010000";
konstant end_char: std_logic_vector (5 downto 0): = "100000";- statens register og næste statslige register for FSM
signal state, next_state: std_logic_vector (5 downto 0): = tomgang;signal D_PS2C: std_logic: ='0 '; - debounced PS2C
signal Q1, Q2: std_logic: ='0 ';- skift register gemmer de modtagne bits
signal REG: std_logic_vector (7 downto 0): = X "00";signal ptysum: std_logic: ='0 '; - paritet summen
signal ptycheck: std_logic: ='0 '; - paritet kontrollere bitsignal cnt: heltal fra 0 til 7: = 0; - counter- Attributterne nedenfor forhindre ISE compiler fra
- optimering af staten maskiner.
De vil blive gennemført som
- beskrevet i konstant erklæringer ovenfor.Attributten fsm_extract: string;
Attributten fsm_extract stats: signal er "nej";
Attributten fsm_extract af next_state: signal er "nej";Attributten fsm_encoding: string;
Attributten fsm_encoding stats: signalet er "bruger";
Attributten fsm_encoding af next_state: signalet er "bruger";Attributten signal_encoding: string;
Attributten signal_encoding stats: signalet er "bruger";
Attributten signal_encoding af next_state: signalet er "bruger";begynd-------------------------------------------------- --------------------
- MODUL GENNEMFØRELSE
-------------------------------------------------- ------------------------------------- Sample Keyboard Indgange -----------------------------debounce: processen (mclk, PS2C, Q1, Q2)
begynd
hvis mclk'event og mclk ='1 'og derefter
Q1 <= PS2C;
Q2 <= Q1;
udgangen, hvis;
ende proces debounce;D_PS2C <= (IKKE Q1) og Q2;----------------- Synkroniseringsprocessen ----------------------------regstate: processen (mclk, next_state, RST)
begynd
hvis RST ='1 'og derefter
state <= tomgang - State Machine nulstille
elsif mclk'EVENT og mclk ='1 'og derefter
state <= next_state;
udgangen, hvis;
ende proces regstate;-------------------- Stat Overgange ---------------------------- ---overgang: proces (stat, D_PS2C, PS2D, cnt, ptycheck)
begynd
tilfælde staten
når inaktiv => - tomgang
hvis D_PS2C ='1 'og PS2D ='0' og derefter - kontrollere start bit
next_state <= shift_data;
anden
next_state <= tomgang;
udgangen, hvis;når shift_data => - skift i data
hvis D_PS2C ='1 'og cnt = 7 derefter
next_state <= check_parity - gå og kontrollere paritet
anden
next_state <= shift_data;
udgangen, hvis;når check_parity => - kontrollere paritet
hvis D_PS2C ='1 'og PS2D = ptycheck derefter
next_state <= check_stopbit - gyldig paritet bit
- Gå ud og kontrollere stopbit
elsif D_PS2C ='1 'og derefter
next_state <= parity_error - paritet fejl
anden
next_state <= check_parity;
udgangen, hvis;når check_stopbit => - kontrollere stopbit;
hvis D_PS2C ='1 'og PS2D ='1' og derefter
next_state <= end_char - gyldig stopbit, slutningen Alfanum
elsif D_PS2C ='1 'og derefter
next_state <= frame_error - Frame Fejl
anden
next_state <= check_stopbit;
udgangen, hvis;når frame_error => - Frame Fejl
next_state <= tomgang;når parity_error => - Parity Error
next_state <= tomgang;når end_char => - slutningen Alfanum
next_state <= tomgang;når andre => next_state <= tomgang;
ende sag;
ende proces overgang;------ Optælling bits og registrering når state = shift_data ---------------Regin: processen (mclk, D_PS2C, PS2D, cnt, ptysum, stat)
begynd
hvis staten / = shift_data derefter
cnt <= 0;
ptysum <='0 ';
elsif mclk'EVENT og mclk ='1 'og derefter
hvis D_PS2C ='1 'og derefter
ptysum <= ptysum XOR PS2D - beregning paritet summen
REG (7 downto 0) <= PS2D & REG (7 downto 1) - at flytte data i registerhvis cnt = 7 derefter
cnt <= 0;
anden
cnt <= cnt 1;
udgangen, hvis;
udgangen, hvis;
udgangen, hvis;
ende proces Regin;------------------ PARITIY SUM ------------------------------ -------------parity_sum: processen (mclk, D_PS2C, PS2D, cnt, statslige ptysum)
begynd
hvis mclk'EVENT og mclk ='1 'og derefter
hvis state = shift_data og D_PS2C ='1 'og cnt = 7 derefter
ptycheck <= (IKKE ptysum) XOR PS2D - paritet kontrollere bit
udgangen, hvis;
udgangen, hvis;
ende proces parity_sum;---------------- OUTPUT ASSIGNEMENT -------------------------------- ------Ps2Dout <= REG;
fRd <='1 ', når state = end_char ellers'0';udgangen Behavioral;
Jeg forsøger at lære VHDL bruger en digilent bord og eksempel og har en meget grundlæggende spørgsmål.
Koden er ...Code:-------------------------------------------------- --------------------------------
- Firma: Digilent Inc.
- Ingeniør: Claudia Goga
--
- Opret Dato: 22:33:35 11/25/06
- Modul Navn: PS2_Reader - Behavioral
- Målenheder: CoolRunner2 CPLD
- Tool versioner: Xilinx ISE v7.1i
- Beskrivelse:
- Dette modul hedder scanne koder fra PS2 Port.
Hver gang en
- Nye scanne koden er helt modtaget det mulighed for at fRd signal til en
- Vigtigste ur periode.
--
- Revision 0.01 - File Created
- Yderligere kommentarer:
--
-------------------------------------------------- --------------------------------library IEEE;
brug IEEE.STD_LOGIC_1164.ALL;
brug IEEE.STD_LOGIC_ARITH.ALL;
brug IEEE.STD_LOGIC_UNSIGNED.ALL;enhed PS2_Reader er
Port (mclk: i std_logic; - systemuret
PS2C: i std_logic; - PS2 Ur
PS2D: i std_logic; - PS2 data
RST: i std_logic; - Nulstil BTN0
Ps2Dout: out std_logic_vector (7 downto 0); - ud data
fRd: out std_logic); - data gyldig flag
udgangen PS2_Reader;architecture Behavioral af PS2_Reader er-------------------------------------------------- ----------------------
- SIGNAL og konstant ERKLÆRINGER
-------------------------------------------------- ----------------------
- Konstanterne nedenfor definere state koderne for PS2 Keyboard
- læseren ved at bruge en HOT kodning.konstant tomgang: std_logic_vector (5 downto 0): = "000000";
konstant shift_data: std_logic_vector (5 downto 0): = "000001";
konstant check_parity: std_logic_vector (5 downto 0): = "000010";
konstant check_stopbit: std_logic_vector (5 downto 0): = "000100";
konstant frame_error: std_logic_vector (5 downto 0): = "001000";
konstant parity_error: std_logic_vector (5 downto 0): = "010000";
konstant end_char: std_logic_vector (5 downto 0): = "100000";- statens register og næste statslige register for FSM
signal state, next_state: std_logic_vector (5 downto 0): = tomgang;signal D_PS2C: std_logic: ='0 '; - debounced PS2C
signal Q1, Q2: std_logic: ='0 ';- skift register gemmer de modtagne bits
signal REG: std_logic_vector (7 downto 0): = X "00";signal ptysum: std_logic: ='0 '; - paritet summen
signal ptycheck: std_logic: ='0 '; - paritet kontrollere bitsignal cnt: heltal fra 0 til 7: = 0; - counter- Attributterne nedenfor forhindre ISE compiler fra
- optimering af staten maskiner.
De vil blive gennemført som
- beskrevet i konstant erklæringer ovenfor.Attributten fsm_extract: string;
Attributten fsm_extract stats: signal er "nej";
Attributten fsm_extract af next_state: signal er "nej";Attributten fsm_encoding: string;
Attributten fsm_encoding stats: signalet er "bruger";
Attributten fsm_encoding af next_state: signalet er "bruger";Attributten signal_encoding: string;
Attributten signal_encoding stats: signalet er "bruger";
Attributten signal_encoding af next_state: signalet er "bruger";begynd-------------------------------------------------- --------------------
- MODUL GENNEMFØRELSE
-------------------------------------------------- ------------------------------------- Sample Keyboard Indgange -----------------------------debounce: processen (mclk, PS2C, Q1, Q2)
begynd
hvis mclk'event og mclk ='1 'og derefter
Q1 <= PS2C;
Q2 <= Q1;
udgangen, hvis;
ende proces debounce;D_PS2C <= (IKKE Q1) og Q2;----------------- Synkroniseringsprocessen ----------------------------regstate: processen (mclk, next_state, RST)
begynd
hvis RST ='1 'og derefter
state <= tomgang - State Machine nulstille
elsif mclk'EVENT og mclk ='1 'og derefter
state <= next_state;
udgangen, hvis;
ende proces regstate;-------------------- Stat Overgange ---------------------------- ---overgang: proces (stat, D_PS2C, PS2D, cnt, ptycheck)
begynd
tilfælde staten
når inaktiv => - tomgang
hvis D_PS2C ='1 'og PS2D ='0' og derefter - kontrollere start bit
next_state <= shift_data;
anden
next_state <= tomgang;
udgangen, hvis;når shift_data => - skift i data
hvis D_PS2C ='1 'og cnt = 7 derefter
next_state <= check_parity - gå og kontrollere paritet
anden
next_state <= shift_data;
udgangen, hvis;når check_parity => - kontrollere paritet
hvis D_PS2C ='1 'og PS2D = ptycheck derefter
next_state <= check_stopbit - gyldig paritet bit
- Gå ud og kontrollere stopbit
elsif D_PS2C ='1 'og derefter
next_state <= parity_error - paritet fejl
anden
next_state <= check_parity;
udgangen, hvis;når check_stopbit => - kontrollere stopbit;
hvis D_PS2C ='1 'og PS2D ='1' og derefter
next_state <= end_char - gyldig stopbit, slutningen Alfanum
elsif D_PS2C ='1 'og derefter
next_state <= frame_error - Frame Fejl
anden
next_state <= check_stopbit;
udgangen, hvis;når frame_error => - Frame Fejl
next_state <= tomgang;når parity_error => - Parity Error
next_state <= tomgang;når end_char => - slutningen Alfanum
next_state <= tomgang;når andre => next_state <= tomgang;
ende sag;
ende proces overgang;------ Optælling bits og registrering når state = shift_data ---------------Regin: processen (mclk, D_PS2C, PS2D, cnt, ptysum, stat)
begynd
hvis staten / = shift_data derefter
cnt <= 0;
ptysum <='0 ';
elsif mclk'EVENT og mclk ='1 'og derefter
hvis D_PS2C ='1 'og derefter
ptysum <= ptysum XOR PS2D - beregning paritet summen
REG (7 downto 0) <= PS2D & REG (7 downto 1) - at flytte data i registerhvis cnt = 7 derefter
cnt <= 0;
anden
cnt <= cnt 1;
udgangen, hvis;
udgangen, hvis;
udgangen, hvis;
ende proces Regin;------------------ PARITIY SUM ------------------------------ -------------parity_sum: processen (mclk, D_PS2C, PS2D, cnt, statslige ptysum)
begynd
hvis mclk'EVENT og mclk ='1 'og derefter
hvis state = shift_data og D_PS2C ='1 'og cnt = 7 derefter
ptycheck <= (IKKE ptysum) XOR PS2D - paritet kontrollere bit
udgangen, hvis;
udgangen, hvis;
ende proces parity_sum;---------------- OUTPUT ASSIGNEMENT -------------------------------- ------Ps2Dout <= REG;
fRd <='1 ', når state = end_char ellers'0';udgangen Behavioral;