VHDL simulering av åpne avløp pull ups

S

shaiko

Guest
Hei, jeg vil gjerne simulere åpne avløp trukket opp porter i testbench mitt. For eksempel: I2C klokke og data INOUT portene er outputed så høyt 'Z' en og deretter trukket opp til en '1 'ved en pull up motstand for å oppnå en "kablet og". I simuleringen min, vil jeg utgangene som får
 
Hvorfor ikke bruke eksisterende oppløsning funksjon for std_logic? Legg til denne linjen sted: my_inout_signal
 
Hei std_match, ønsker jeg å kunne gjøre dette uten å endre RTL kode. Derfor må signalet løses fra den testbench siden ...
 
Det bør ikke uansett hvor du kjører signalet til "H", så det burde være OK å ha den i testbenk.
 
Vennligst forseggjort. i min RTL komponent: some_inout_signal
 
Du legger en driver til test benken signal (std_logic) som er koblet til "some_inout_signal". test_bench_signal_connected_to_dut_open_drain
 
Prøvde det, ikke bra. Jeg trenger min RTL å "se" (register tilbake) en '1 'når den selv driver utgang til "Z" og ingen andre signal på bussen trekker det til '0'. For examle: - kjører vi en INOUT port til 'Z' et sted i vår RTL kode inout_port
 
hvis du skriver en oppløsning funksjon, må du endre alle dine logikk til den andre typen, som wont bli støttet av synthesisor riktig. Jeg fortsatt ikke forstår hva du prøver å gjøre i testbench din. Det er som om du prøver å se noe i testbench som har ingenting å gjøre med UUT. Jeg har også ikke forstår hva du mener med "registrert" INOUT port. Dette er ikke mulig. Registrerer bare gå i en retning, med utgang koblet til en tri-state buffer.
 
Prøvde det, ikke bra. Jeg trenger min RTL å "se" (register tilbake) en '1 'når den selv driver utgang til "Z" og ingen andre signal på bussen trekker det til '0'. For examle: - kjører vi en INOUT port til 'Z' et sted i vår RTL kode inout_port
 
'H' har ikke samme effekt som '1 '. inout_signal = 'H' er ikke det samme som inout_signal = '1 'hva hvis jeg ikke har tilgang til RTL. VHD?
 
så hvorfor ikke bare koble inout_signal til '1 '? hvis driving 'Z' intenerally deretter lese logikken vil kunne se '1 '. Du bør også ha tilgang til enable signal slik at du vet når du skal bytte til 'Z'
 
"H" har ikke samme effekt som '1 '. inout_signal = 'H' er ikke det samme som inout_signal = '1 'hva hvis jeg ikke har tilgang til RTL. VHD?
Ok, "kan H' bryte simuleringen. Alle funksjoner i std_logic_1164 vil fungere, men kode som "hvis inout_signal = '1 '" vil mislykkes. En ting å prøve i test benk (jeg har ikke testet det):
Code:
 pull_up: prosess (test_bench_signal_connected_to_dut_open_drain) begynne - Utgangen fra denne prosessen vil være låst til '1 'eller' Z 'hvis test_bench_signal_connected_to_dut_open_drain =' Z 'da test_bench_signal_connected_to_dut_open_drain
 
så hvorfor ikke bare koble inout_signal til '1'?'
Det er en INOUT port ... den tesbench side også driver signal. Tenk på følgende på en I2C bus: En mester sender adressen og venter for slaven å erkjenne ved å trekke bussen til '0 '. Ingen kjører bussen til '1 '... en '1' nivå er oppnådd ved pull up motstander. Jeg trenger en enkel løsning funksjon som konverterer "Z til '1 '...
 
En '1 'og en' Z 'kjørt sammen vil gi '1'
DUT og testen benken må også kunne kjøre signalet til '0 '.. Hvis testbench driver det til '1 ', kan det aldri bli '0', bare '1 'og' X '. Vi har to eller flere sjåfører, kjører de '0 'eller' Z '. Vi ønsker at signalet skal være '0 'hvis noen driver stasjoner '0', ellers vil vi '1 '.
 
akkurat ... i den "virkelige verden" det er gjort på PCB eller ved en intern dra opp på IC. Jeg vil gjerne gjøre det samme på testbench
 
En ting til å prøve i test benk (jeg har ikke testet det):
Hvis du får "U" i simuleringen, endres slik at 'X' eller 'U' vil aktivere den "Z" driver:
Code:
 pull_up: prosess (test_bench_signal_connected_to_dut_open_drain) begynne - Utgangen fra denne prosessen vil være låst til '1 'eller' Z 'hvis test_bench_signal_connected_to_dut_open_drain =' Z 'da test_bench_signal_connected_to_dut_open_drain
 
Synes å gjøre jobben ... men signalene er "svært fargerike". På stigende kanten av trukket opp signalet det blå (angivelig 'Z') for en uendelig mengde tid og på de fallende kanten er det rødt (angivelig 'X'). Ellers når signalet er stabil den er grønn (på '1 'eller '0' som det skal være). Noen slags kappløpssituasjon på kantene ...
 

Welcome to EDABoard.com

Sponsor

Back
Top