| module mem2reg_test1(in_addr, in_data, out_addr, out_data); | |
| input [1:0] in_addr, out_addr; | |
| input [3:0] in_data; | |
| output reg [3:0] out_data; | |
| reg [3:0] array [2:0]; | |
| always @* begin | |
| array[0] = 0; | |
| array[1] = 23; | |
| array[2] = 42; | |
| array[in_addr] = in_data; | |
| out_data = array[out_addr]; | |
| end | |
| endmodule | |
| // ------------------------------------------------------ | |
| module mem2reg_test2(clk, reset, mode, addr, data); | |
| input clk, reset, mode; | |
| input [2:0] addr; | |
| output [3:0] data; | |
| (* mem2reg *) | |
| reg [3:0] mem [0:7]; | |
| assign data = mem[addr]; | |
| integer i; | |
| always @(posedge clk) begin | |
| if (reset) begin | |
| for (i=0; i<8; i=i+1) | |
| mem[i] <= i; | |
| end else | |
| if (mode) begin | |
| for (i=0; i<8; i=i+1) | |
| mem[i] <= mem[i]+1; | |
| end else begin | |
| mem[addr] <= 0; | |
| end | |
| end | |
| endmodule | |
| // ------------------------------------------------------ | |
| // http://www.reddit.com/r/yosys/comments/28d9lx/problem_with_concatenation_of_two_dimensional/ | |
| module mem2reg_test3( input clk, input [8:0] din_a, output reg [7:0] dout_a, output [7:0] dout_b); | |
| reg [7:0] dint_c [0:7]; | |
| always @(posedge clk) | |
| begin | |
| {dout_a[0], dint_c[3]} <= din_a; | |
| end | |
| assign dout_b = dint_c[3]; | |
| endmodule | |
| // ------------------------------------------------------ | |
| module mem2reg_test4(result1, result2, result3); | |
| output signed [9:0] result1; | |
| output signed [9:0] result2; | |
| output signed [9:0] result3; | |
| wire signed [9:0] intermediate [0:3]; | |
| function integer depth2Index; | |
| input integer depth; | |
| depth2Index = depth; | |
| endfunction | |
| assign intermediate[depth2Index(1)] = 1; | |
| assign intermediate[depth2Index(2)] = 2; | |
| assign intermediate[3] = 3; | |
| assign result1 = intermediate[1]; | |
| assign result2 = intermediate[depth2Index(2)]; | |
| assign result3 = intermediate[depth2Index(3)]; | |
| endmodule | |
| // ------------------------------------------------------ | |
| module mem2reg_test5(input ctrl, output out); | |
| wire [0:0] foo[0:0]; | |
| wire [0:0] bar[0:1]; | |
| assign foo[0] = ctrl; | |
| assign bar[0] = 0, bar[1] = 1; | |
| assign out = bar[foo[0]]; | |
| endmodule | |