2016-04-14 18 views
1

Ich bin neu in Scala und ich habe versucht, die RISC-V-Architektur zu verstehen. Ich stolperte über diesen Code, den ich seit Stunden anstarrte, unfähig zu verstehen.ListLookUp in CHISEL

val csignals =                         
    ListLookup(io.dat.inst,                      
         List(N, BR_N , OP1_X , OP2_X , ALU_X , WB_X , REN_0, MEN_0, M_X , MT_X, CSR.N), 
      Array(  /* val | BR | op1 | op2  | ALU | wb | rf | mem | mem | mask | csr */ 
         /* inst | type | sel | sel | fcn | sel | wen | en | wr | type | cmd */ 
       LW  -> List(Y, BR_N , OP1_RS1, OP2_IMI , ALU_ADD , WB_MEM, REN_1, MEN_1, M_XRD, MT_W, CSR.N), 
       LB  -> List(Y, BR_N , OP1_RS1, OP2_IMI , ALU_ADD , WB_MEM, REN_1, MEN_1, M_XRD, MT_B, CSR.N), 
       LBU  -> List(Y, BR_N , OP1_RS1, OP2_IMI , ALU_ADD , WB_MEM, REN_1, MEN_1, M_XRD, MT_BU, CSR.N),... 

1. Ich möchte wissen, was ListLookUp genau hier tut. 2. Ist der Wert von 'csignals' Boolean oder etwas anderes?

Antwort

3

Das ListLookUp entspricht ungefähr einer switch() Anweisung in der Softwareprogrammierung oder einer casez Anweisung in Verilog RTL.

Das erste Argument (io.dat.inst) ist das zu vergleichende Signal.

Das zweite Argument ist der Standardwert, wenn keine Übereinstimmung auftritt.

Das dritte Argument ist ein Array von "Schlüssel" -> "Wert" Tupel. Die io.dat.inst wird mit den Schlüsseln abgeglichen, um eine Übereinstimmung zu finden, und csignals wird auf den value Teil gesetzt, wenn eine Übereinstimmung gefunden wird.

Also csignals ist von einer Art List().

+0

Die folgende Codezeile war nach der 'ListLookUp'-Funktion vorhanden. [code] val (cs_val_inst: Bool) :: cs_br_typ :: cs_op1_sel :: cs_op2_sel :: cs0 = csignals [/ code] Was genau passiert hier? Ich verstehe, dass eine Liste mit den cs_ * Variablen erstellt wird. – batssassin

+0

Es stimmt die einzelnen Elemente in der Liste auf der rechten Seite mit den Variablen auf der linken Seite überein. Das ist die Scala-Syntax, die Sie lesen können. – Chris