Forum: FPGA, VHDL & Co. Verilog: Anfängerproblem


von Peter Reither (Gast)


Lesenswert?

Hi!

Gerade arbeite ich mich ein wenig in Verilog ein. Dazu habe ich ein 
Modul geschrieben, welches eine x86 Adresse mit Adresse und Segment 
berechnen soll. Dazu habe ich folgenden Code geschrieben:
1
module AddressGenerator(inAddr,inSeg,outAddr,enable);
2
  input [15:0] inAddr;
3
  input [15:0] inSeg;
4
  output [19:0] outAddr;
5
  input enable;
6
  //result = (segment * 10h) + addr
7
  assign outAddr = (enable) ? ({inSeg,1'b0} + inAddr) : 20'bz;
8
  
9
  initial $monitor("Addr: %h, Seg: %h, Enable: %d, Out: %h",inAddr,inSeg,enable,outAddr);
10
   
11
endmodule

Test für Modul:
1
    reg [15:0] inAddr;
2
    reg [15:0] inSeg;
3
    wire [19:0] outAddr;
4
    wire enable;
5
    assign enable = 1;
6
    
7
    AddressGenerator ag(inAddr,inSeg,outAddr,enable);
8
    
9
    initial begin
10
        inAddr = 16'h0;
11
        inSeg = 16'h0;
12
        #5
13
        inAddr = 16'hAB;
14
        #5 inSeg = 16'h230;
15
    end

Im zweiten Teil sollte das Ergebnis '0x23AB' sein ((0x230 * 0x10) + 0xAB 
= 0x23AB). Leider zeigt mir ModelSim folgenden Output an:

# Addr: 0000, Seg: 0000, Enable: 1, Out: 00000
# Addr: 00ab, Seg: 0000, Enable: 1, Out: 000ab
# Addr: 00ab, Seg: 0230, Enable: 1, Out: 0050b

habt ihr eine Idee wo das Problem liegen kann?

Danke im Voraus!

von Lattice User (Gast)


Lesenswert?

1
assign outAddr = (enable) ? ({inSeg,4'b0} + inAddr) : 20'bz;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lattice User schrieb:
> {inSeg,4'b0}
Ach, so sieht eine Concatenation aus.
http://www.utdallas.edu/~kad056000/index_files/verilog/replication.html
Jungs, so werde ich nebenher noch Verilog lernen...  ;-)

von Peter Reither (Gast)


Lesenswert?

Lattice User schrieb:
> assign outAddr = (enable) ? ({inSeg,4'b0} + inAddr) : 20'bz;

Natürlich, wie dumm von mir. Das ist diese Art Fehler wo man anfängt an 
seinem eigenen Verstand zu zweifeln, danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.