| // one of my early test cases was the OpenCores I2C master |
| // This is a collection of stripped down code snippets from |
| // this core that triggered bugs in early versions of yosys. |
| |
| // from i2c_master_bit_ctrl |
| module i2c_test01(clk, rst, nReset, al); |
| |
| input clk, rst, nReset; |
| output reg al; |
| |
| reg cmd_stop; |
| always @(posedge clk or negedge nReset) |
| if (~nReset) |
| cmd_stop <= #1 1'b0; |
| else if (rst) |
| cmd_stop <= #1 1'b0; |
| |
| always @(posedge clk or negedge nReset) |
| if (~nReset) |
| al <= #1 1'b0; |
| else if (rst) |
| al <= #1 1'b0; |
| else |
| al <= #1 ~cmd_stop; |
| |
| endmodule |
| |
| // from i2c_master_bit_ctrl |
| module i2c_test02(clk, slave_wait, clk_cnt, cmd, cmd_stop, cnt); |
| |
| input clk, slave_wait, clk_cnt; |
| input cmd; |
| |
| output reg cmd_stop; |
| |
| reg clk_en; |
| output reg [15:0] cnt; |
| |
| always @(posedge clk) |
| if (~|cnt) |
| if (~slave_wait) |
| begin |
| cnt <= #1 clk_cnt; |
| clk_en <= #1 1'b1; |
| end |
| else |
| begin |
| cnt <= #1 cnt; |
| clk_en <= #1 1'b0; |
| end |
| else |
| begin |
| cnt <= #1 cnt - 16'h1; |
| clk_en <= #1 1'b0; |
| end |
| |
| always @(posedge clk) |
| if (clk_en) |
| cmd_stop <= #1 cmd; |
| |
| endmodule |
| |