123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- /*
- * Call it a ROM even through it can be optionally written to.
- * Trust the tools to figure out if we don't need part of the whole thing.
- */
- module usb_desc_rom (
- input clk,
- input [8:0] usb_addr,
- output [7:0] usb_rdata,
- input cpu_clk,
- input [8:0] cpu_addr,
- output [7:0] cpu_rdata,
- input [7:0] cpu_wdata,
- input cpu_wren
- );
- reg [7:0] rom [0:511];
- initial begin
- rom[9'h000] = 8'h22;
- rom[9'h001] = 8'h03;
- rom[9'h002] = 8'h53;
- rom[9'h003] = 8'h00;
- rom[9'h004] = 8'h65;
- rom[9'h005] = 8'h00;
- rom[9'h006] = 8'h72;
- rom[9'h007] = 8'h00;
- rom[9'h008] = 8'h69;
- rom[9'h009] = 8'h00;
- rom[9'h00a] = 8'h61;
- rom[9'h00b] = 8'h00;
- rom[9'h00c] = 8'h6c;
- rom[9'h00d] = 8'h00;
- rom[9'h00e] = 8'h4e;
- rom[9'h00f] = 8'h00;
- rom[9'h010] = 8'h75;
- rom[9'h011] = 8'h00;
- rom[9'h012] = 8'h6d;
- rom[9'h013] = 8'h00;
- rom[9'h014] = 8'h62;
- rom[9'h015] = 8'h00;
- rom[9'h016] = 8'h65;
- rom[9'h017] = 8'h00;
- rom[9'h018] = 8'h72;
- rom[9'h019] = 8'h00;
- rom[9'h01a] = 8'h48;
- rom[9'h01b] = 8'h00;
- rom[9'h01c] = 8'h65;
- rom[9'h01d] = 8'h00;
- rom[9'h01e] = 8'h72;
- rom[9'h01f] = 8'h00;
- rom[9'h020] = 8'h65;
- rom[9'h021] = 8'h00;
- rom[9'h022] = 8'h12;
- rom[9'h023] = 8'h01;
- rom[9'h024] = 8'h01;
- rom[9'h025] = 8'h01;
- rom[9'h026] = 8'h00;
- rom[9'h027] = 8'h00;
- rom[9'h028] = 8'h00;
- rom[9'h029] = 8'h08;
- rom[9'h02a] = 8'h50;
- rom[9'h02b] = 8'h1d;
- rom[9'h02c] = 8'h49;
- rom[9'h02d] = 8'h61;
- rom[9'h02e] = 8'h00;
- rom[9'h02f] = 8'h01;
- rom[9'h030] = 8'h02;
- rom[9'h031] = 8'h03;
- rom[9'h032] = 8'h01;
- rom[9'h033] = 8'h01;
- rom[9'h034] = 8'h09;
- rom[9'h035] = 8'h02;
- rom[9'h036] = 8'h8d;
- rom[9'h037] = 8'h00;
- rom[9'h038] = 8'h04;
- rom[9'h039] = 8'h01;
- rom[9'h03a] = 8'h04;
- rom[9'h03b] = 8'hc0;
- rom[9'h03c] = 8'hfa;
- rom[9'h03d] = 8'h08;
- rom[9'h03e] = 8'h0b;
- rom[9'h03f] = 8'h00;
- rom[9'h040] = 8'h02;
- rom[9'h041] = 8'h02;
- rom[9'h042] = 8'h02;
- rom[9'h043] = 8'h00;
- rom[9'h044] = 8'h05;
- rom[9'h045] = 8'h09;
- rom[9'h046] = 8'h04;
- rom[9'h047] = 8'h00;
- rom[9'h048] = 8'h00;
- rom[9'h049] = 8'h01;
- rom[9'h04a] = 8'h02;
- rom[9'h04b] = 8'h02;
- rom[9'h04c] = 8'h00;
- rom[9'h04d] = 8'h05;
- rom[9'h04e] = 8'h05;
- rom[9'h04f] = 8'h24;
- rom[9'h050] = 8'h00;
- rom[9'h051] = 8'h20;
- rom[9'h052] = 8'h01;
- rom[9'h053] = 8'h05;
- rom[9'h054] = 8'h24;
- rom[9'h055] = 8'h01;
- rom[9'h056] = 8'h03;
- rom[9'h057] = 8'h01;
- rom[9'h058] = 8'h04;
- rom[9'h059] = 8'h24;
- rom[9'h05a] = 8'h02;
- rom[9'h05b] = 8'h06;
- rom[9'h05c] = 8'h05;
- rom[9'h05d] = 8'h24;
- rom[9'h05e] = 8'h06;
- rom[9'h05f] = 8'h00;
- rom[9'h060] = 8'h01;
- rom[9'h061] = 8'h07;
- rom[9'h062] = 8'h05;
- rom[9'h063] = 8'h82;
- rom[9'h064] = 8'h03;
- rom[9'h065] = 8'h40;
- rom[9'h066] = 8'h00;
- rom[9'h067] = 8'h02;
- rom[9'h068] = 8'h09;
- rom[9'h069] = 8'h04;
- rom[9'h06a] = 8'h01;
- rom[9'h06b] = 8'h00;
- rom[9'h06c] = 8'h02;
- rom[9'h06d] = 8'h0a;
- rom[9'h06e] = 8'h00;
- rom[9'h06f] = 8'h00;
- rom[9'h070] = 8'h04;
- rom[9'h071] = 8'h07;
- rom[9'h072] = 8'h05;
- rom[9'h073] = 8'h81;
- rom[9'h074] = 8'h02;
- rom[9'h075] = 8'h40;
- rom[9'h076] = 8'h00;
- rom[9'h077] = 8'h00;
- rom[9'h078] = 8'h07;
- rom[9'h079] = 8'h05;
- rom[9'h07a] = 8'h01;
- rom[9'h07b] = 8'h02;
- rom[9'h07c] = 8'h40;
- rom[9'h07d] = 8'h00;
- rom[9'h07e] = 8'h00;
- rom[9'h07f] = 8'h08;
- rom[9'h080] = 8'h0b;
- rom[9'h081] = 8'h02;
- rom[9'h082] = 8'h02;
- rom[9'h083] = 8'h02;
- rom[9'h084] = 8'h02;
- rom[9'h085] = 8'h00;
- rom[9'h086] = 8'h06;
- rom[9'h087] = 8'h09;
- rom[9'h088] = 8'h04;
- rom[9'h089] = 8'h02;
- rom[9'h08a] = 8'h00;
- rom[9'h08b] = 8'h01;
- rom[9'h08c] = 8'h02;
- rom[9'h08d] = 8'h02;
- rom[9'h08e] = 8'h00;
- rom[9'h08f] = 8'h06;
- rom[9'h090] = 8'h05;
- rom[9'h091] = 8'h24;
- rom[9'h092] = 8'h00;
- rom[9'h093] = 8'h20;
- rom[9'h094] = 8'h01;
- rom[9'h095] = 8'h05;
- rom[9'h096] = 8'h24;
- rom[9'h097] = 8'h01;
- rom[9'h098] = 8'h03;
- rom[9'h099] = 8'h03;
- rom[9'h09a] = 8'h04;
- rom[9'h09b] = 8'h24;
- rom[9'h09c] = 8'h02;
- rom[9'h09d] = 8'h06;
- rom[9'h09e] = 8'h05;
- rom[9'h09f] = 8'h24;
- rom[9'h0a0] = 8'h06;
- rom[9'h0a1] = 8'h02;
- rom[9'h0a2] = 8'h03;
- rom[9'h0a3] = 8'h07;
- rom[9'h0a4] = 8'h05;
- rom[9'h0a5] = 8'h84;
- rom[9'h0a6] = 8'h03;
- rom[9'h0a7] = 8'h40;
- rom[9'h0a8] = 8'h00;
- rom[9'h0a9] = 8'h02;
- rom[9'h0aa] = 8'h09;
- rom[9'h0ab] = 8'h04;
- rom[9'h0ac] = 8'h03;
- rom[9'h0ad] = 8'h00;
- rom[9'h0ae] = 8'h02;
- rom[9'h0af] = 8'h0a;
- rom[9'h0b0] = 8'h00;
- rom[9'h0b1] = 8'h00;
- rom[9'h0b2] = 8'h04;
- rom[9'h0b3] = 8'h07;
- rom[9'h0b4] = 8'h05;
- rom[9'h0b5] = 8'h83;
- rom[9'h0b6] = 8'h02;
- rom[9'h0b7] = 8'h40;
- rom[9'h0b8] = 8'h00;
- rom[9'h0b9] = 8'h00;
- rom[9'h0ba] = 8'h07;
- rom[9'h0bb] = 8'h05;
- rom[9'h0bc] = 8'h03;
- rom[9'h0bd] = 8'h02;
- rom[9'h0be] = 8'h40;
- rom[9'h0bf] = 8'h00;
- rom[9'h0c0] = 8'h00;
- rom[9'h0c1] = 8'h06;
- rom[9'h0c2] = 8'h03;
- rom[9'h0c3] = 8'h09;
- rom[9'h0c4] = 8'h04;
- rom[9'h0c5] = 8'h1d;
- rom[9'h0c6] = 8'h04;
- rom[9'h0c7] = 8'h18;
- rom[9'h0c8] = 8'h03;
- rom[9'h0c9] = 8'h50;
- rom[9'h0ca] = 8'h00;
- rom[9'h0cb] = 8'h65;
- rom[9'h0cc] = 8'h00;
- rom[9'h0cd] = 8'h74;
- rom[9'h0ce] = 8'h00;
- rom[9'h0cf] = 8'h65;
- rom[9'h0d0] = 8'h00;
- rom[9'h0d1] = 8'h72;
- rom[9'h0d2] = 8'h00;
- rom[9'h0d3] = 8'h20;
- rom[9'h0d4] = 8'h00;
- rom[9'h0d5] = 8'h26;
- rom[9'h0d6] = 8'h00;
- rom[9'h0d7] = 8'h20;
- rom[9'h0d8] = 8'h00;
- rom[9'h0d9] = 8'h50;
- rom[9'h0da] = 8'h00;
- rom[9'h0db] = 8'h65;
- rom[9'h0dc] = 8'h00;
- rom[9'h0dd] = 8'h72;
- rom[9'h0de] = 8'h00;
- rom[9'h0df] = 8'h2e;
- rom[9'h0e0] = 8'h03;
- rom[9'h0e1] = 8'h4d;
- rom[9'h0e2] = 8'h00;
- rom[9'h0e3] = 8'h41;
- rom[9'h0e4] = 8'h00;
- rom[9'h0e5] = 8'h58;
- rom[9'h0e6] = 8'h00;
- rom[9'h0e7] = 8'h38;
- rom[9'h0e8] = 8'h00;
- rom[9'h0e9] = 8'h30;
- rom[9'h0ea] = 8'h00;
- rom[9'h0eb] = 8'h20;
- rom[9'h0ec] = 8'h00;
- rom[9'h0ed] = 8'h49;
- rom[9'h0ee] = 8'h00;
- rom[9'h0ef] = 8'h2f;
- rom[9'h0f0] = 8'h00;
- rom[9'h0f1] = 8'h4f;
- rom[9'h0f2] = 8'h00;
- rom[9'h0f3] = 8'h20;
- rom[9'h0f4] = 8'h00;
- rom[9'h0f5] = 8'h63;
- rom[9'h0f6] = 8'h00;
- rom[9'h0f7] = 8'h61;
- rom[9'h0f8] = 8'h00;
- rom[9'h0f9] = 8'h72;
- rom[9'h0fa] = 8'h00;
- rom[9'h0fb] = 8'h64;
- rom[9'h0fc] = 8'h00;
- rom[9'h0fd] = 8'h20;
- rom[9'h0fe] = 8'h00;
- rom[9'h0ff] = 8'h66;
- rom[9'h100] = 8'h00;
- rom[9'h101] = 8'h6f;
- rom[9'h102] = 8'h00;
- rom[9'h103] = 8'h72;
- rom[9'h104] = 8'h00;
- rom[9'h105] = 8'h20;
- rom[9'h106] = 8'h00;
- rom[9'h107] = 8'h41;
- rom[9'h108] = 8'h00;
- rom[9'h109] = 8'h42;
- rom[9'h10a] = 8'h00;
- rom[9'h10b] = 8'h43;
- rom[9'h10c] = 8'h00;
- rom[9'h10d] = 8'h02;
- rom[9'h10e] = 8'h03;
- rom[9'h10f] = 8'h1c;
- rom[9'h110] = 8'h03;
- rom[9'h111] = 8'h4d;
- rom[9'h112] = 8'h00;
- rom[9'h113] = 8'h41;
- rom[9'h114] = 8'h00;
- rom[9'h115] = 8'h58;
- rom[9'h116] = 8'h00;
- rom[9'h117] = 8'h38;
- rom[9'h118] = 8'h00;
- rom[9'h119] = 8'h30;
- rom[9'h11a] = 8'h00;
- rom[9'h11b] = 8'h20;
- rom[9'h11c] = 8'h00;
- rom[9'h11d] = 8'h63;
- rom[9'h11e] = 8'h00;
- rom[9'h11f] = 8'h6f;
- rom[9'h120] = 8'h00;
- rom[9'h121] = 8'h6e;
- rom[9'h122] = 8'h00;
- rom[9'h123] = 8'h73;
- rom[9'h124] = 8'h00;
- rom[9'h125] = 8'h6f;
- rom[9'h126] = 8'h00;
- rom[9'h127] = 8'h6c;
- rom[9'h128] = 8'h00;
- rom[9'h129] = 8'h65;
- rom[9'h12a] = 8'h00;
- rom[9'h12b] = 8'h1c;
- rom[9'h12c] = 8'h03;
- rom[9'h12d] = 8'h50;
- rom[9'h12e] = 8'h00;
- rom[9'h12f] = 8'h55;
- rom[9'h130] = 8'h00;
- rom[9'h131] = 8'h4e;
- rom[9'h132] = 8'h00;
- rom[9'h133] = 8'h38;
- rom[9'h134] = 8'h00;
- rom[9'h135] = 8'h30;
- rom[9'h136] = 8'h00;
- rom[9'h137] = 8'h20;
- rom[9'h138] = 8'h00;
- rom[9'h139] = 8'h6e;
- rom[9'h13a] = 8'h00;
- rom[9'h13b] = 8'h65;
- rom[9'h13c] = 8'h00;
- rom[9'h13d] = 8'h74;
- rom[9'h13e] = 8'h00;
- rom[9'h13f] = 8'h77;
- rom[9'h140] = 8'h00;
- rom[9'h141] = 8'h6f;
- rom[9'h142] = 8'h00;
- rom[9'h143] = 8'h72;
- rom[9'h144] = 8'h00;
- rom[9'h145] = 8'h6b;
- rom[9'h146] = 8'h00;
- rom[9'h147] = 8'h00;
- rom[9'h148] = 8'h96;
- rom[9'h149] = 8'h00;
- rom[9'h14a] = 8'h00;
- rom[9'h14b] = 8'h00;
- rom[9'h14c] = 8'h00;
- rom[9'h14d] = 8'h08;
- end
- always @(posedge clk) begin
- usb_rdata <= rom[usb_addr];
- end
- always @(posedge cpu_clk) begin
- cpu_rdata <= rom[cpu_addr];
- if (cpu_wren)
- rom[cpu_addr] <= cpu_wdata;
- end
- endmodule
- module usb_desc_index (
- input [7:0] dtype,
- input [7:0] dindex,
- input [15:0] windex,
- input additional,
- output reg [8:0] addr,
- output reg [8:0] len
- );
- always @(*)
- if (additional)
- {addr,len} = {9'h147,9'h007};
- else priority casez ({windex,dindex,dtype})
- 32'b??????00_00011101_00000010_00000011: {addr,len} = {9'h0c7,9'h018};
- 32'b??????00_00011101_00000011_00000011: {addr,len} = {9'h0df,9'h02e};
- 32'b??????00_00011101_00000100_00000011: {addr,len} = {9'h10d,9'h002};
- 32'b??????00_00011101_00000101_00000011: {addr,len} = {9'h10f,9'h01c};
- 32'b??????00_00011101_00000110_00000011: {addr,len} = {9'h12b,9'h01c};
- 32'b????????_????????_00000000_00000010: {addr,len} = {9'h034,9'h08d};
- 32'b????????_????????_00000000_00000011: {addr,len} = {9'h0c1,9'h006};
- 32'b????????_????????_00000001_00000011: {addr,len} = {9'h000,9'h022};
- 32'b????????_????????_00000010_00000011: {addr,len} = {9'h0c7,9'h018};
- 32'b????????_????????_00000011_00000011: {addr,len} = {9'h0df,9'h02e};
- 32'b????????_????????_00000100_00000011: {addr,len} = {9'h10d,9'h002};
- 32'b????????_????????_00000101_00000011: {addr,len} = {9'h10f,9'h01c};
- 32'b????????_????????_00000110_00000011: {addr,len} = {9'h12b,9'h01c};
- 32'b????????_????????_????????_00000001: {addr,len} = {9'h022,9'h012};
- 32'b????????_????????_????????_????????: {addr,len} = {9'hxxx,9'h000};
- endcase
- endmodule
|