`timescale 1ns/1ps module top_generic #( parameter sim = 0 )( input wire aclk, input wire aresetn, output wire led_green, output wire led_red, output wire[5:0] r2r, output wire[7:0] LED ); `include "conv.vh" // Clocking wire clk_100; wire clk_15; assign clk_100 = aclk; clk_gen clocking( .clk_in(clk_100), .clk_out_15(clk_15) ); // Reset conditioning for button input: // - asynchronous assert when button is pressed (aresetn=0) // - synchronous, debounced deassert in clk_15 domain localparam [17:0] RESET_RELEASE_CYCLES = sim ? 18'd16 : 18'd150000; // ~10 ms @ 15 MHz on hardware reg [17:0] rst_cnt = 18'd0; reg sys_reset_r = 1'b1; always @(posedge clk_15 or negedge aresetn) begin if (!aresetn) begin rst_cnt <= 18'd0; sys_reset_r <= 1'b1; end else if (sys_reset_r) begin if (rst_cnt == RESET_RELEASE_CYCLES - 1'b1) sys_reset_r <= 1'b0; else rst_cnt <= rst_cnt + 1'b1; end end wire sys_reset = sys_reset_r; wire sys_resetn = !sys_reset_r; wire [31:0] GPIO_A; wire [31:0] GPIO_B; wire [31:0] GPIO_C; wire [31:0] GPIO_D; wire test; mcu #( .memfile("../sw/sweep/sweep.hex"), .sim(sim), .jtag(1) ) mcu ( .i_clk(clk_15), .i_rst(sys_reset), .i_GPI_A(GPIO_A), .i_GPI_B(GPIO_B), .i_GPI_C(GPIO_C), .i_GPI_D(GPIO_D), .o_GPO_A(GPIO_A), .o_GPO_B(GPIO_B), .o_GPO_C(GPIO_C), .o_GPO_D(GPIO_D) ); wire [15:0] sin_q15; wire clk_en; nco_q15 #( .CLK_HZ(15_000_000), .FS_HZ(80_000) ) nco ( .clk (clk_15), .rst_n (sys_resetn), .freq_hz(GPIO_A), .sin_q15(sin_q15), .cos_q15(), .clk_en (clk_en) ); reg [5:0] dac_code; always @(posedge clk_15) begin dac_code <= q15_to_uq16(sin_q15) >> 10; end assign r2r = dac_code; assign LED = GPIO_B[7:0]; assign led_green = GPIO_C[0]; assign led_red = GPIO_C[1]; endmodule