| import argparse |
| from collections import namedtuple |
| |
| TEMPLATE = """`include "bram_test.v" |
| |
| module top ( |
| input wire clk, |
| |
| input wire rx, |
| output wire tx, |
| |
| input wire [15:0] sw, |
| output wire [15:0] led |
| ); |
| |
| bram_test #( |
| .ADDR_WIDTH({ADDR_WIDTH}), |
| .DATA_WIDTH({DATA_WIDTH}), |
| .ADDRESS_STEP({ADDRESS_STEP}), |
| .MAX_ADDRESS({MAX_ADDRESS}) |
| ) bram_test ( |
| .clk(clk), |
| .rx(rx), |
| .tx(tx), |
| .sw(sw), |
| .led(led) |
| ); |
| |
| endmodule |
| """ |
| |
| BramConfig = namedtuple('BramConfig', 'data_width addr_width depth') |
| |
| BRAM_TYPE_WIDTH = { |
| # UG473 Table 1-11 |
| (18, 1): BramConfig(1, 14, 16384), |
| (18, 2): BramConfig(2, 13, 8192), |
| (18, 4): BramConfig(4, 12, 4096), |
| (18, 9): BramConfig(9, 11, 2048), |
| (18, 18): BramConfig(18, 10, 1024), |
| # UG473 Table 1-13 |
| (36, 1): BramConfig(1, 15, 32768), |
| (36, 2): BramConfig(2, 14, 16384), |
| (36, 4): BramConfig(4, 13, 8192), |
| (36, 9): BramConfig(9, 12, 4096), |
| (36, 18): BramConfig(18, 11, 2048), |
| (36, 36): BramConfig(18, 10, 1024), |
| } |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description="") |
| |
| parser.add_argument('--type', type=int, required=True) |
| parser.add_argument('--width', type=int, required=True) |
| |
| args = parser.parse_args() |
| |
| bram_config = BRAM_TYPE_WIDTH[args.type, args.width] |
| |
| print( |
| TEMPLATE.format( |
| ADDR_WIDTH=bram_config.addr_width, |
| DATA_WIDTH=bram_config.data_width, |
| ADDRESS_STEP=1, |
| MAX_ADDRESS=bram_config.depth - 1, |
| ) |
| ) |
| |
| |
| if __name__ == "__main__": |
| main() |