(opcode, breg, rb och rd är 4bits vektorer)
Kod: Markera allt
always@(*)
begin
case(opcode)
4'h0,
4'h1,
4'h3: breg <= rb;
4'h8,
4'h9: breg <= rd;
default: breg <= 4'hx;
endcase
end
Jag tycker alltså att den koden ovan borde ge samma resultat efter syntetisering som följande:
Kod: Markera allt
always@(*)
begin
if(opcode[3]) breg <= rd;
else breg <= rb;
end
Vad jag inte fattar är varför Quartus inte klarar att minimera den övre varianten så den blir identisk med den nedre... För visst ska de vara likvärdiga? Eller är det min hjärna det är fel på idag?
Jag har en massa kod i det här projektet skriven enligt den övre varianten, för det blir tydligare och jag tänkte att det nog är bäst att låta mjukvaran optimera... men nu vet jag inte riktigt. Ska jag behöva rita massa carnaugh-diagram och göra jobbet själv?