Verilog / LEC chyták

S

Shahzad40

Guest
Nazdar,

Podívejte se na následující kód:
vstup TX_IN;
reg [12:0] Rx;
Vždy @ (posedge CLK)
začít
if (CLR)
....
....
Rx <= ~ TX_IN;
..
jiné
...
konec
Can anyone tell me se orgán Rx [0] dostane převrácené na TX_IN nebo všechny bity Rx dostane převrácené na TX_IN?
Proto se ptám, je příčinou Myslel jsem, že pouze LSB dostane obráceně, takže jsem změnil kód
Rx [12:1] = 12'b0;
Rx [0] = ~ TX_IN;
a když jsem LEC dva kód, LEC oznámil, že dva kódy jsou unequivalent
Pozdravy,

 
Nevím, jestli jsem za to já sám orgán, a vy si ukázali, téměř žádný kód, ale nevidím nic, v původní kód, který nastaví Rx [12:1] na 12'b0;

Tak se vaše změny, která se stanoví Rx [12:1] k 12'b0, nemůže být rovnocenný staré.

Jeho není dobré praxe pro zatížení multi-bitový registr s jedinou bitovou hodnotu a převzít ostatní bity budou mít určitou hodnotu.

rb

 
Udělej si svůj kód EXPLICT:

rx <= (13 ~ TX_IN ());

Nebo

rx <= (12'd0, ~ TX_IN);

Nebo

rx [0] <= ~ TX_IN;

V závislosti na tom, co chcete.

 
Díky za odpovědi:
Jsem tedy pravdu v tom, že první část kódu, pokud:
Rx <= ~ TX_IN;
Znamená to, že Rx [0] bude mít převrácené na TX_IN a zbytek bitů Rx [12:1] jsou na rozdíl od uninitiallized Rx [0].A to není dobré.Vyvstává otázka, proč to není dobré.

a modifikovaná verze, pokud:
Rx [12:1] = 12'b0;
Rx [0] = ~ TX_IN;
výslovně inicializuje Rx [12:0]

 
Citace:

Znamená to, že Rx [0] bude mít převrácené na TX_IN a zbytek bitů Rx [12:1] jsou na rozdíl od uninitiallized Rx [0].
A to není dobré.
Vyvstává otázka, proč to není dobré.
 
Prosím, čtěte dále, jak jsem to vyřešit a byl jsem překvapen, že nikdo nebyl schopen odpovědět na jednoduchou otázku, Verilog (jsem nováček z Verilog).Provedl jsem syntézy a to LEC, aby vyšel s důležitý závěr:
Moje původní otázku:

vstup TX_IN;
reg [12:0] Rx;
Vždy @ (posedge CLK)
začít
if (CLR)
....
....
Rx <= ~ TX_IN;
..
jiné
...
konec
Can anyone tell me se orgán Rx [0] dostane převrácené na TX_IN nebo všechny bity Rx dostane převrácené na TX_IN?

Odpovědí je, že Rx [0] dostane převrácené na TX_IN ale Rx [12:1] bude vše dostanete hodnotu 1 a ne 0 a důvodem je, že nástroj je nádivkou 0s s TX_IN aby byl trochu široký a 13 pak použití inverze.Pokud odeberete inverze, Rx [12:1] dostane 0s.
Mám to důkladně zkontrolovat
Pozdravy

 
Ale vy jste ve skutečnosti odpovědět na otázku, Verilog.Otázka, na kterou byla odpověděl: "Co jsem jet řetězce dělat, když jsem neúplně zadat operace v Verilog?"

Jste strávil den zjišťuje, jaké nástroje předpokládat, když jste se nepodařilo jednoznačně určit svého obvodu operaci.Nástroje neměl předpokládat nic.Musíte jim říct všechno.

Měli byste vědět, co přesně syntézu nářadí nebo simulátoru bude dělat při každém řádku napíšete, protože kód je napsán tak, že nic není nejednoznačná na vás, na další designéři, nebo nástroj.

V konečném důsledku je tato funkce, co byste čekali, které mají být provedeny?I když je jeho nebezpečné nechat jakékoli části nástroje řetězce udělat odhady.Mohlo by to asi jinak příště.Nebo jiný nástroj může léčit jinak.

V tomto případě nástroj zní úvodní nuly, což je běžné.Ale nechávat to na to vektor, který prochází logické operace je velmi nebezpečné.

Není velkým tajemstvím odhalila zde.Psaní kódu tak je společný newbie omyl.A udělal jsem chybu, že jsem taky.Jeho velmi špatné kódování technikou.Nicméně, část mého příjmu závisí na lidech, aby se i nadále, že chybu, tak možná bych neměla být lidé, kterým se opravuje

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />rb

 
Neberte si věci do vašeho srdce.Pokud budete číst mou otázku, zeptal jsem se jednoduchou a přímou otázku, a já jsem nedostal odpověď kterékoli z nich.Budu se opakovat otázku:
"Může mi někdo říct, orgán Rx [0] dostane převrácené na TX_IN nebo všechny bity Rx dostane převrácené na TX_IN?
Proto se ptám, je příčinou Myslel jsem, že pouze LSB dostane obráceně, takže jsem změnil kód
Rx [12:1] = 12'b0;
Rx [0] = ~ TX_IN;
a když jsem LEC dva kód, LEC oznámil, že dva kódy jsou unequivalent "

To nebyl můj kód a bylo součástí čipu pracuje 10 let jako CHIP.Také bylo napsané guru, jsem si všiml, že se tyto guru druh věcí chcete skrýt nebo by se mohly projevit, když to bude provedeno velmi jednoduchým způsobem.To nesnáším.Vím, že to mělo být výslovné a jednoduché.Z uvedeného vyplývá, že kód se nachází v Verilog specifikace LRM.
Chcete-li prokázat bod, cituji Verilog 2001 LRM sec 4.1.10 Bit-wise operátory strana 48

"Když operandy jsou nerovné bitové délky, kratší operand je nula-vyplněna nejvýznamnějších bitů"

Zde je kód nádivkou nuly v MSBs a pak provádí inverzi, a to je důvod, proč jsme si flip-obvody, které jsou nastaveny na reset.
Tak proč LEC ukazoval unequivalent je uvedeno, že jsem Rx [12:1], které mají být 0 a změníte-li je na všechny 1s LEC projde.

Vám navrhl následující ve své předchozí zprávě.
- Nejasnosti v kódu
- Nástroj bude jakékoli dohady
- Je to nebezpečné
- Je to omyl, a
- Není to velmi špatné kódování technikou.
Všechny vaše návrhy jsou jednoduše špatné podle LRM.LRM nikde navrhuje nepoužívat tento styl, zatímco na mnoha příležitosti říct, že to nemůže dělat bla-bla
Je perfektní, legální a explicitní nástroj z hlediska.Čitelnost z hlediska, já souhlasím, je to špatné.
Musím zkontrolovat tento kód a experemented pomocí follwoing:
Verilog LRM
Cadence LEC (to RTL-k-RTL a RTL-k-netlist kontrola)
Design Compiler (syntéza)
Synplicity
VCS
Xilinx XST
Viděl jsem souladu s tím, co říkám

To nemusí být záhadou pro vás, ale pro mě to bylo a jsem rád, že jsem strávil den na to (ne moje oficiální čas).

Na konci, neposílejte návrhy, jak jste bez nějaké konkrétní poznatky, jsme logické společnosti a logiky mají přednost.

 

Welcome to EDABoard.com

Sponsor

Back
Top