VGA Horizontale teller Behavioral VHDL-code

B

BlackOps

Guest
Hallo,

Ik probeer de code gedragssturing VHDL model van de VGA-Horizontale teller van de Enochs boek.(zoals sommige mensen hebben me geadviseerd om eenvoudige dingen in behavioral model. En ik zal verbinden alle structurele elementen in de code in de Top bron bestand).Neem een kijkje op de foto van het schema van Horizontale counter uit het boek.

hier is mijn code:

Code:LIBRARY IEEE;

GEBRUIK IEEE.STD_LOGIC_1164.ALL;

GEBRUIK IEEE.STD_LOGIC_UNSIGNED.ALL; - de noodzaak deze toe te voegen STD_LOGIC_VECTORsENTITY HCount IS PORT (

Klok: IN STD_LOGIC;

Duidelijk: in STD_LOGIC;

Rollover: OUT STD_LOGIC;

H_cntD: OUT STD_LOGIC;

H_cntDE: OUT STD_LOGIC;

H_cntDEB: OUT STD_LOGIC;

H_cntDEBC: OUT STD_LOGIC;

Q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0));

EIND HCount;ARCHITECTUUR VAN HCount Behavioral IS

SIGNAL waarde: STD_LOGIC_VECTOR (9 DOWNTO 0);BEGIN

PROCESS (Klok, Clear)BEGIN

Indien er duidelijk ='1 ', dan

waarde <= (OTHERS =>'0 ');

Elsif (Clock'EVENT en klok ='1 ') THEN

waarde <= waarde 1;

END IF;ALS (waarde = B'1010000000 ') VERVOLGENS - test voor 640

H_cntD <='1 ';

Elsif

(waarde = B'1010010100 ') VERVOLGENS - test voor 660

H_cntDE <='1 ';

Elsif

(waarde = B'1011110011 ') VERVOLGENS - test voor 755

H_cntDEB <='1 ';

Elsif

(waarde = B'1100100000 ') VERVOLGENS - test voor 800

H_cntDEBC <='1 '& Rollover <='1' & waarde <= (OTHERS =>'0 ');

END IF;Proces beëindigen;Q <= waarde;

EIND Behavioral;

 
bij het schrijven van een bus moet worden als dit b "00001111" of x "ffff" of b "0_1_0_1"

u '

 
Daarnaast zijn de B-base specificeerder kan worden weggelaten,
want het
is standaard.

 
Nou ik geprobeerd om "in plaats van", maar niets werkte ... ideeën? precies waar u wilt dat ik gezegd? Ik heb gezegd na B.. ook geprobeerd om het als H_cntD <= "1";

mijn code:
Code:ALS (waarde = B "1010000000") then - test voor 640

H_cntD => "1";

Elsif

(waarde = B "1010010100") then - test voor 660

H_cntDE => "1";

Elsif

(waarde = B "1011110011") then - test voor 755

H_cntDEB => "1";

Elsif

(waarde = B "1100100000") then - test voor 800

H_cntDEBC => "1" & Rollover => "1" & waarde <= (OTHERS =>'0 ');

END IF;

 
, which is correct syntax for assignment, now you have H_cnt => "1"
, which implies two syntax errors in one line
.

Ja, in je eerste voorbeeld was H_cntD <='1 ',
dat is correct syntax voor opdracht, nu heb je H_cnt => "1",
hetgeen impliceert twee syntaxfouten in een lijn.Gebruik de originele expressie.

.

Voor bits, in tegenstelling tot wat vectoren een constante waarde maakt gebruik van een enkele offerte en de toewijzing operator <=.
 
WELL,
oke nu heb ik dit:

Code:ALS (waarde = B "1010000000") then - test voor 640

H_cntD <='1 ';

Elsif

(waarde = B "1010010100") then - test voor 660

H_cntDE <='1 ';

Elsif

(waarde = B "1011110011") then - test voor 755

H_cntDEB <='1 ';

Elsif

(waarde = B "1100100000") then - test voor 800

H_cntDEBC <='1 '& Rollover <='1' & waarde <= (OTHERS =>'0 ');

END IF;

 
Nu dat werkte!

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Lachten" border="0" />

dank u voor de hulp!

 
hoi,
Controleer deze code, i schriftelijke deze code voor de HP7540 MONITOR .........
Ik krijg niet whats WRONG IN THIS PLEASE HELP ME ...... Thanks in ADAVANCE

LIBRARY IEEE;
GEBRUIK IEEE.STD_LOGIC_1164.ALL;
GEBRUIK IEEE.STD_LOGIC_ARITH.ALL;
GEBRUIK IEEE.STD_LOGIC_UNSIGNED.ALL;entiteit test_vga1 is
port (clk: in std_logic;
reset: in std_logic;
hsync: out std_logic;
vsync: out std_logic;
rood: de std_logic_vector (7 downto 0);
groen: in std_logic_vector (7 downto 0);
blauw: de std_logic_vector (7 downto 0);
blank_n: out std_logic;
dac_clk: inout std_logic;
Pclk: out std_logic;
blank_out: out std_logic;
sync_n: out std_logic);
einde test_vga1;VGA-architectuur van test_vga1 is

signaal Vclk: std_logic;
- signaal Pclk: std_logic;
signaal Osig: std_logic;
signaal Hcount: std_logic_vector (21 downto 0);
signaal Vcount: std_logic_vector (21 downto 0);
signaal B1count: std_logic_vector (21 downto 0);
signaal Bcount: std_logic_vector (21 downto 0);
signaal tot_count: std_logic_vector (21 downto 0);
signaal hblank: std_logic;
signaal Vblank: std_logic;
signaal blanco: std_logic;
signaal h2blank: std_logic;
signaal v2blank: std_logic;
signaal trial_data: std_logic_vector (23 downto 0);
soort gegevens array (0 tot 2699) van std_logic_vector (23 downto 0);component pll1
PORT
(
areset: IN STD_LOGIC: ='0 ';
inclk0: IN STD_LOGIC: ='0 ';
C0: OUT STD_LOGIC;
vergrendeld: OUT STD_LOGIC
);
end component;

- constante foto: gegevens: = (
signaal lsrt: std_logic;

beginnen
trial_data <= "111111110000000000000000";
lsrt <= niet (opnieuw);

- bit0: PLL1 haven kaart (areset => lsrt, inclk0 => clk, C0 => Pclk, vergrendeld => Osig);
bit1: pll1 haven kaart (areset => lsrt, inclk0 => clk, C0 => dac_clk, vergrendeld => Osig);

Pclk <= dac_clk;

- Pllclk <= Pclk;

hsyn_co: proces (clk, reset) is
beginnen
Als resetten ='0 ', dan
Hcount <= "0000000000000000000000";
hsync <='1 ';
elsif (clk'event en clk ='1 '), dan
if (Hcount < "0000000000000001101110") dan - en Hcount < "0000000000011010010000") dan
hsync <='1 ';
anders
hsync <='0 ';
end if;
indien Hcount < "0000000000011010010000" dan
Hcount <= Hcount '1 ';
anders
Hcount <= "0000000000000000000000"; - "0000000000000000000000";
end if;
end if;
einde proces;

vsync_tim: proces (clk, reset) is

beginnen
Als resetten ='0 ', dan
Vcount <= "0000000000000000000000";
vsync <='1 ';
elsif (clk'event en clk ='1 '), dan
if (Vcount < "0000000010100101101000") dan - en Vcount < "0110010010111110101000") dan
vsync <='1 ';
anders
vsync <='0 ';
end if;
indien Vcount < "0110010010111110101000"
en vervolgens - als Vcount>
16.784 dan
Vcount <= Vcount '1 ';
--- Vcount: = 0;
anders
Vcount <= "0000000000000000000000";
end if;
end if;
einde proces;--
--
- hblank_sig: proces (clk, reset) is
- Beginnen
- Indien resetten ='0 ', dan
- Bcount <= "0000000000000000000000";
- B1count <= "0000000000000000000000";
- Tot_count <= "0000000000000000000000";
- Blanco <='1 ';
- Elsif (clk'event en clk ='1 '), dan
- If (tot_count < "0000011111101010011010") dan
--
- If (Bcount> "0000000000000010100111" en Bcount < "0000000000101101000010") dan
- H2blank <='0 ';
- Anders
- H2blank <='1 ';
- End if;
--
- Indien Bcount < "0000000000101101000010" dan
- Bcount <= Bcount 1;
- Anders
- Bcount <= "0000000000000000000000";
- End if;
--
--
- Elsif (tot_count < "0111001011101001000010") dan
- If ((tot_count < "0000011111101010011010") en tot_count < "0111001011101001000010") dan
- H2blank <='0 ';
- End if;
--
- Indien tot_count < "0111001011101001000010"
en vervolgens - als count>
16.784 dan
- Tot_count <= tot_count 1; - blanco <='0 ';
- Anders
- Tot_count <= "0000000000000000000000"; - count: = count 1;
- End if;
- End if;
--
- End if;
- Blank_n <= h2blank;
- Blank_out <= h2blank;
--
- Einde proces;
--
--
--
--
--
--
--hblank_sig: proces (clk, reset) is
- subtype min integer bereik 0 tot 1882690;
- variabele count: integer;
beginnen
Als resetten ='0 ', dan
Bcount <= "0000000000000000000000";
B1count <= "0000000000000000000000";
leeg <='1 ';
elsif (clk'event en clk ='1 '), dan
if (Bcount> "0000000000000010100111" en Bcount < "0000000000101101000010") dan
leeg <='0 ';
- Elsif (Bcount> "0000011111101010011010" en Bcount < "0111001011101001000010") dan
- Blanco <='0 ';
anders
leeg <='1 ';
end if;
- Indien Bcount < "0000000000101101000010" dan
- Bcount <= Bcount 1;
- Anders
- Bcount <= "0000000000000000000000";
- End if;
- If (Bcount> "0000011111101010011010" en Bcount < "0111001011101001000010") dan
- Blanco <='0 ';
- Anders
- Blanco <='1 '; - tel: = 1;
- End if;

indien Bcount < "0000000000101101000010"
en vervolgens - als count>
16.784 dan
Bcount <= Bcount 1; - blanco <='0 ';
anders
Bcount <= "0000000000000000000000"; - count: = count 1;
end if;
end if;
einde proces;

- vblank_sig: proces (clk, reset) is
- - Subtype min integer bereik 0 tot 1882690;
- - Variabele count: integer;
- Beginnen
- Indien resetten ='0 ', dan
- B1count <= "0000000000000000000000";
- Blanco <='1 ';
- Elsif (clk'event en clk ='1 '), dan
- If (B1count> "0000011111101010011010" en B1count < "0111001011101001000010") dan
- Blanco <='0 ';
- Anders
- Blanco <='1 '; - tel: = 1;
- End if;
- Indien B1count < "0111001011101001000010"
en vervolgens - als count>
16.784 dan
- B1count <= B1count 1; - blanco <='0 ';
- Anders
- B1count <= "0000000000000000000000"; - count: = count 1;
- End if;
- End if;
- Einde proces;
--
blank_n <= blank;
sync_n <='0 ';
blank_out <= blank;

--

data_tranfer:
Process (reset, dac_clk) is
variabele count: integer: = 0;
beginnen
Als resetten ='0 ', dan
rode <= "00000000";
groen <= "00000000";
blauw <= "00000000";
elsif dac_clk ='1 'en vervolgens dac_clk'event
- indien telling <307.200 dan
--------- trial_data <= foto (graaf);
rode <= trial_data (7 downto 0);
groen <= trial_data (15 downto

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Koel" border="0" />

;
blauw <= trial_data (23 downto 16);
count: = count 1;
- End if;
end if;

einde proces;einde VGA;

 
Je moet vertellen, wat voor onverwachte resultaten je krijgt.Het eenvoudig te controleren
is het werken met een eenvoudig operatable simulator.Ik denk dat het met qu (at) rtus volgens de PLL module syntax, kun je na bijvoorbeeld simulatie resultaat en wijzen, wat lijkt te zijn verkeerd.

 
Mijn kleine Verilog voorbeeld kan nuttig zijn om iemand.Het genereert een eenvoudige geanimeerde 800x600 pixel scherm met behulp van een Xilinx / Digilent Spartan-3 Starter Kit:
ftopic142493.html # 528046

 

Welcome to EDABoard.com

Sponsor

Back
Top