Min VHDL-kod får inte plats i PALCE16V8!

Hej

Håller på med lite digitalteknik, närmare bestämmt försöker jag programmera en PALCE16V8 i VHDL. Med betoning på *försöker*, eftersom jag inte lyckas så bra. Jag har skrivit VHDL-kod för en sekvenskrets (tillståndsmaskin), och allt (syntes och optimering m.m) fungerar bra förutom när programmet (Cypress Warp/Galaxy) slutligen försöker sig på "device fitting" för PALCE16V8. Den säger "Logic equation has too many product terms" för fyra signaler (de som bygger upp next_state-tillståndet).

Rapportfilen visar följande om felen: Error: Logic equation has too many product terms on signal next_state_IBV_3. Found = 17 , Maximum = 7 Error: Logic equation has too many product terms on signal next_state_IBV_2. Found = 17 , Maximum = 7 Error: Logic equation has too many product terms on signal next_state_IBV_1. Found = 12 , Maximum = 7 Error: Logic equation has too many product terms on signal next_state_IBV_0. Found = 8 , Maximum = 7

Vad kan man göra för att få plats med koden i PALCE16V8? Jag har provat med att kompilera till en annan, större krets, och då gick det utmärkt och simulering visade sen att koden är korrekt. Kan det vara så att koden är ooptimalt skriven så att uttrycken blir onödigt stora? Man tycker ju att Warp ska klara av sånt vid optimeringen.

Nedan finns hela VHDL-koden. "Programmet" i fråga är en "fäktautomat", dvs en maskin som registrerar träffar under en fäktning, och ger utsignalen RED=1 om röd fick en träff och GREEN=1 om grön fick en träff. Och om båda får in träff (inom 40ms) blir både RED och GREEN 1.

Tacksam för alla synpunkter/åsikter!

Hälsningar /Jimi

--

--Jimi Hullegård 2003

--

--GF2

--VHDL-kod för fäktautomaten.

--

--Målkrets: PALCE16V8

--Pinnar:

--CLK=1,RHIT=4,GHIT=5,RESET=6,GREEN=18,RED=17

library IEEE; use IEEE.std_logic_1164.all;

entity fencingmachine is port(CLK,RHIT,GHIT,RESET: in std_logic; RED,GREEN: out std_logic); end entity;

architecture beteende of fencingmachine is subtype state_type is integer range 0 to 11; signal present_state, next_state: state_type; begin state_diagram: process(present_state, RHIT, GHIT) begin case present_state is when 0 => if RHIT='1' and GHIT='1' then next_state

Reply to
Jimi Hullegård
Loading thread data ...

Jag löste problemet själv. Och om nu någon har glädje av informationen: Felet berode på att jag kodade tillstånden som heltal. Dvs tillstånd0 representerades av siffran 0, tillstånd1 av siffran 1 osv. Detta måste Warp ha tolkat som att jag vill att tillstånden ska kodas som 0000 (11 tillstånd behöver 4 bitar, 2^4=16) till 1011. Men det är ju inte nödvändigtvis den bästa kodningen*. När jag istället inte definierade tillstånden som heltal, utan bara kallade dom state1, state2 osv så kunde Warp själv välja den kodning som gav optimalast kod, och då fick allt plats i kretsen.

Jimi

*Jag provade själv att skriva uttrycken för tillståndsvariablerna (mha karnaugh-diagram) och fick äckligt långa uttryck.
Reply to
Jimi Hullegård

Jag är övertygad om att i verkligheten görs många saker helt annorlunda från hur saker görs under utbildningar, men nu var det så att själva uppgiften handlade om att göra en tillståndsmaskin som fungerade som en "fäktningsautomat".

För min del har jag svårt att förstå din kod. Vad betyder t.ex OTHERS när det inte används tillsammans med CASE? (Hjälpen pratar om "expandable ground" och jag fattar nada).

Men efter att ha skummat igenom koden (har dessvärre inte tid med ordentlig genomgång nu) så kan jag inte hitta något i koden som gör att efter en viss tid så ska utgångarna "låsas".

Klockfrekvensen valdes så att man enkelt kunde mäta upp 40ms, vilket då motsvarade 4 klockpulser.

Jag provade din kod men fick den inte att kompilera ens efter ett flertal ändringar. Och som sagt, hade jag haft mer tid så hade jag satt mig in i det här lite mer. Men nu är uppgiften inlämnad och godkänd så jag känner att jag måste koncentrera mig på andra saker för tillfället. Men om du har tid och lust så vore det trevligt om du kunde skriva om koden så att den går att kompilera för det vore kul att se att den går att skriva så mycket enklare, även om uppgiften som sådan handlade om tillståndsmaskiner.

Hälsningar Jimi

Reply to
Jimi Hullegård

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.