`timescale 1ns / 1ps module PuenteH(clk, reset, enable, we, addr, IN, pwm_out, ram_read); input clk; input enable; //enable input we; //enable de escritura input reset; //reset input [10:0]addr; //Direcciones ram input [7:0] IN; //Data output [3:0] pwm_out; //Pines de salida al PWM output [7:0] ram_read;//Lectura desde el HBRIDGE reg [7:0] PWM_1=0; //PWM motor derecho reg [7:0] PWM_2=0; //PWM motor izquierdo reg [7:0] PWM_3=0; //PWM motor derecho reg [7:0] PWM_4=0; //PWM motor izquierdo reg we1=0; //Write enable // REGISTER BANK: Write control always @(negedge clk) begin if(reset) {PWM_1, PWM_2, PWM_3, PWM_4,we1} <= 0; else if(we & enable) begin case (addr) 0: begin PWM_1 <= IN; end 1: begin PWM_2 <= IN; end 2: begin PWM_3 <= IN; end 3: begin PWM_4 <= IN; end default: begin we1 <= 1; end endcase end else begin we1 <= 0; end end RAMB16_S9 ba0( .CLK(~clk), .EN(enable), .DOP(), .SSR(1'b0), .ADDR(addr[10:0]), .WE(we1), .DI(IN), .DIP(1'b0), .DO(ram_read)); /* // Dual-port RAM instatiation RAMB16_S9_S9 ba0( .DOA(out), // Port A 8-bit Data Output .DOB(PWM_ram_reg), // Port B 8-bit Data Output .DOPA(), // Port A 1-bit Parity Output .DOPB(), // Port B 1-bit Parity Output .ADDRA(addr[10:0]), // Port A 11-bit Address Input .ADDRB(1'b0), // Port B 11-bit Address Input .CLKA(~clk), // Port A Clock .CLKB(~clk), // Port B Clock .DIA(IN), // Port A 8-bit Data Input .DIB(), // Port B 8-bit Data Input .DIPA(1'b0), // Port A 1-bit parity Input .DIPB(1'b0), // Port-B 1-bit parity Input .ENA(1'b1), // Port A RAM Enable Input .ENB(1'b1), // Port B RAM Enable Input .SSRA(1'b0), // Port A Synchronous Set/Reset Input .SSRB(1'b0), // Port B Synchronous Set/Reset Input .WEA(we1), // Port A Write Enable Input .WEB(1'b0) ); // Port B Write Enable Input */ PWM OUT1A ( .clk(clk), .enable(1'b1), .PWM_in(PWM_1), .PWM_out(pwm_out[0]) ); PWM OUT1B ( .clk(clk), .enable(1'b1), .PWM_in(PWM_2), .PWM_out(pwm_out[1]) ); PWM OUT2A ( .clk(clk), .enable(1'b1), .PWM_in(PWM_3), .PWM_out(pwm_out[2]) ); PWM OUT2B ( .clk(clk), .enable(1'b1), .PWM_in(PWM_4), .PWM_out(pwm_out[3]) ); endmodule