Jaka jest różnica między używaniem:
ENTITY MyDemo is
PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo;
i
ENTITY MyDemo is
PORT(X: IN BIT; F: OUT BIT );
END MyDemo;
Jakie są ograniczenia korzystania z BIT w stosunku do STD_LOGIC i odwrotnie? Czy są one całkowicie wymienne? Rozumiem, że jeśli zdefiniowałem STD_LOGIC, nie mogę używać go z BIT_Vector, aby uzyskać dostęp do elementów w tablicy. Ale nie widzę różnicy.
Odpowiedzi:
Bit
jest predefiniowanym typem i może mieć tylko wartość0
lub1
.Bit
Typ jest wartość wyidealizowany.std_logic
jest częściąstd_logic_1164
pakietu i zapewnia bardziej realistyczne modelowanie sygnałów w systemie cyfrowym. Może mieć dziewięć różnych wartości. Zazwyczaj w kodzie można użyć tylko0
,1
iZ
(High-Z). AleU
(Niezainicjowane) iX
(Nieznane) są również bardzo przydatne podczas modelowania systemu w środowisku testowym.std_logic_1164
Pakiet zawiera również funkcje konwersji do konwersjistd_logic
doBit
.źródło
Większość ludzi korzysta
std_logic
. Pozwala to nau
(niezdefiniowane),x
(nieznane) iz
(wysoka impedancja), czego nie robi bit. Chociaż nigdy nie możesz skrystalizować się w układzie i dlatego nie potrzebujeszz
,u
jest przydatny do znajdowania brakujących resetów.x
jest przydatny do znajdowania wielu sterowników.źródło
X
do znajdowania wielu sterowników.std_logic
jest rzeczywiście standardem branżowym dla VHDL, ale jest także jedną z najczęściej wykorzystywanych funkcji VHDL.std_logic
jest rozdzielczym sygnałem, co oznacza, że funkcja jest używana do rozpoznania wartości sygnału w przypadku wielu sterowników. Ale w zdecydowanej większości przypadków wiele sterowników jest błędem. Użycie nierozwiązanego typu, takiego jakstd_ulogic
ten, zostanie oznaczone przez kompilator jako błąd.std_ulogic
. Ale pamiętaj, że wiele rdzeni zostanie napisanych,std_logic
więc prawdopodobnie zobaczysz niektóre z nich.std_logic
jest rzeczywiście najbardziej rozpowszechnionym typem w okolicy; Po prostu twierdzę, że jego użycie nie jest zgodne z pierwotną intencją: Modelowanie sygnałów wielostanowych. Na wewnętrznych wzorów zwykle tylko rozważyć1
czy0
i jeden kierowca. Szczegółowa dyskusja na ten temat znajduje się na stronie electronics.stackexchange.com/questions/17524/ ...std_logic
ma funkcję rozdzielczościNie tylko
std_logic
mają więcej użytecznych stanów oprócz1
a0
, ma też funkcję zdefiniowaną rozdzielczości.Funkcja rozdzielczości to koncepcja języka VHDL. Jest to funkcja powiązana z typem, która określa, co się stanie, gdy wiele wartości tego typu zostanie zastosowanych do pojedynczego sygnału. Składnia jest następująca:
gdzie
std_ulogic
jest nierozwiązana (a przez to znacznie mniej przydatna) wersjastd_logic
.W szczególności oznacza to miłe rzeczy
0
i1
prowadzi doX
:Ma to intuicyjny sens, ponieważ rozumiemy
X
stan, w którym wiele niezgodnych wartości jest stosowanych do jednego drutu.std_logic
wie także, jak rozwiązać każdą inną możliwą parę sygnałów wejściowych zgodnie z tabelą znajdującą się na LRM.bit
z drugiej strony nie ma funkcji rozdzielczości, a gdybyśmy użyli jej w powyższym przykładzie, doprowadziłoby to do błędu symulacji na GHDL 0.34.Możliwe wartości
std_logic
są dobrym wyborem, ponieważ są znormalizowane przez IEEE 1164 i dotyczą wielu typowych przypadków użycia.źródło
std_logic jest bogatszy niż bit i powinien być używany przez większość czasu.
Istnieje również typ boolowski , który, podobnie jak bit , ma dwie wartości. Jest to typ wyniku porównania, typ oczekiwany po IF [bool] lub WHEN [bool] , często używany do stałych selekcji:
constant ENABLE_DEBUG_INTERFACE : boolean := true;
Jednym z miejsc, w których bit może być preferowany w stosunku do std_logic, są duże tablice, wspomnienia. Podczas optymalizacji symulatorów bit zajmuje mniej miejsca w pamięci symulatora niż std_logic . I może mieć znaczenie, jeśli Twój projekt tworzy jedną GB pamięci RAM.
Może być również szybszy w przypadku bardzo dużych projektów, na przykład czegoś generowanego automatycznie z listy bramek po syntezie.
Oczywiście ten aspekt wydajności nie jest częścią języka i zależy od implementacji symulatora VHDL.
źródło