Dúvida Verilog

redshot

ElectroUser
Boas, tenho aqui uma dúvida em Verilog.

O que acontece é que eu tenho isto:
Código:
output [7:0] R;
wire W0, W1 (...) W7;

e queria ligar cada fio (W0, W1, etc) a cada R. Neste momento estou com isto, mas não sei se está certo:

Código:
assign {W0, W1, (...), W7} = R

Como é que faço isso?

CUmps
 
Acho que é assim

assign R = {w7, w6, w5, w4,...,w0};

Já não mexo nisto a uns tempos, mas deve funcionar. Ja deves saber mas tem cuidado com a ordem que declaras as coisas. Como está o w7 é o MSB e w0 é o LSB
 
ALU - Arithmetic Logic Unit

Boas, afinal eu é que percebi mal o enunciado. O objectivo era fazer uma ALU, e cada fio era de 8 bits, e não de 1 bit. Esses fios iam ligar depois a um multiplexador. De qualquer maneira, lá fiz aquilo, de outra maneira, mas certo à mesma. Fica aqui o código, para quem quiser (foi testado numa FPGA Spartan 3. Pode estar incompleto porque não sei se acrescentei mais coisas na aula):

Código:
module main (OPR, A, B, R);
input [2:0] OPR;
input [7:0] A, B;
output [7:0] R;

always @*
begin
[INDENT]case (OPR)
[INDENT]3'b000 : R = B;
3'b001 : R = A - B;
3'b010 : R = A + B;
3'b011 : R = A ^ B;
3'b100 : R = A >> B;
3'b101 : R = A << B;
3'b110 : R = A & B;
3'b111 : R = A | B;[/INDENT]
endcase[/INDENT]

endmodule

Em que o A e B são os operandos de 8 bits, R é o resultado de 8 bits, e OPR é a operação (subtracção, soma, etc).

Ainda falta outra parte do código, as Flags (se R é 0, se dá overflow, etc).

Cumps
 
Back
Topo