Ich habe einen Vektordaten [255: 0]. Und ein anderer Vektor len [3: 0] (len kann per Definition nur einen Maximalwert von 8 annehmen). Ich muß diese (pseudo code) tun:Maske einige Bits in einem Vektor auf der Grundlage eines anderen Vektors
bits= len*32;
data_mod[255:0] = {data[255:(255-(bits-1))], (256-bits)'0}
ex : if len = 6, then
data_mod[255:0] = {data[255:64], 64'b0}
Grundsätzlich Schnappen nur obere „LEN * 32“ Bits aus dem ursprünglichen Vektor und den Rest Null aus.
Ich stecke versucht, dies in synthetisierbaren System Verilog tun? Irgendwelche Ideen?
allererst Sie reichen sollte [511: 0] seit len 4 Bits breit. für den Rest, nach 512 - len * 32 nach rechts verschieben, um die oberen Bits zu greifen. Sie können dann um den gleichen Betrag nach links verschieben, um die unteren Bits zu reinigen. Oder du kannst mit Masken spielen. – Serge
256 Bits sind genug, da der Maximalwert von Len im Design 8 ist. Ich habe an richtige Verschiebung gedacht, dann an linke Verschiebung, aber denke, dass es eine elegantere Art geben muss –