===== Componenti base ===== === Registro === module registro(output[N-1:0] out, input [N-1:0] inp, input beta, input clock); parameter N = 32; reg [N-1:0] stato; initial begin stato = 0; end always @(posedge clock) begin if(beta) stato = inp; end assign out = stato; endmodule === Commutatore === module k2(output [N-1:0]z, input [N-1:0] x, input [N-1:0] y, input alpha); parameter N = 32; assign #2 z = (alpha ? y : x); endmodule === AluINC === module aluinc(output [N-1:0]z, input [N-1:0] x); parameter N = 32; assign #5 z = x + 1; endmodule === AluMeno === module alumeno(output [N-1:0]z, output segno, input [N-1:0]x, input [N-1:0]y); parameter N = 32; assign #5 z = x - y; assign #5 segno = (y > x ? 1 : 0); endmodule === Indicatore a transizione di livello in ingresso === // // modulo RDY (transizione di livello in ingresso) // module rdy(output rdyout, input rdyin, input beta, input clock); reg stato; reg inp; wire in2, out3; initial begin stato = 0; inp = 0; end always @(negedge clock) begin stato = rdyin; end ack contmod2(in2, beta, clock); comp comp2(out3, stato, in2); assign rdyout = out3; endmodule === Indicatore a transizione di livello in uscita === module ack(output ackout, input beta, input clock); reg stato; initial begin stato = 0; end always @(negedge clock) begin if(beta) stato = ~stato; end assign ackout = stato; endmodule === Comparatore === primitive comp(output z, input x, input y); table 0 0 : 0; 0 1 : 1; 1 0 : 1; 1 1 : 0; endtable endprimitive