[Cryptech-Commits] [core/i2c] 01/01: correct size of I2C FSM state values

git at cryptech.is git at cryptech.is
Thu Sep 11 17:58:02 UTC 2014


This is an automated email from the git hooks/post-receive script.

paul at psgd.org pushed a commit to branch master
in repository core/i2c.

commit 595a3e72b4e2c166cc978e59c025560353df0a6b
Author: Paul Selkirk <pselkirk at isc.org>
Date:   Thu Sep 11 13:56:42 2014 -0400

    correct size of I2C FSM state values
    
    When adding new I2C states, I neglected to update the size of all the
    state parameter values, so e.g. I2C_WAITSTOP  = 14'b1 << 15;
    This overflows to 0, which manifests as the I2C bus hanging when asked
    to access an unsupported device address.
---
 src/rtl/i2c_core.v | 49 ++++++++++++++++++++++---------------------------
 1 file changed, 22 insertions(+), 27 deletions(-)

diff --git a/src/rtl/i2c_core.v b/src/rtl/i2c_core.v
index a026545..f5d7c87 100644
--- a/src/rtl/i2c_core.v
+++ b/src/rtl/i2c_core.v
@@ -80,22 +80,22 @@ module i2c_core (
    ////////////////
    ///// protocol-level state machine
    ////////////////
-   parameter I2C_START     = 14'b1 << 0; // should only pass through this state for one cycle
-   parameter I2C_RESTART   = 14'b1 << 1;
-   parameter I2C_DADDR     = 14'b1 << 2;
-   parameter I2C_ACK_DADDR = 14'b1 << 3;
-   parameter I2C_WR_DATA   = 14'b1 << 4;
-   parameter I2C_RXD_SYN   = 14'b1 << 5;
-   parameter I2C_RXD_ACK   = 14'b1 << 6;
-   parameter I2C_ACK_WR    = 14'b1 << 7;
-   parameter I2C_END_WR    = 14'b1 << 8;
-   parameter I2C_TXD_SYN   = 14'b1 << 9;
-   parameter I2C_TXD_ACK   = 14'b1 << 10;
-   parameter I2C_RD_DATA   = 14'b1 << 11;
-   parameter I2C_ACK_RD    = 14'b1 << 12;
-   parameter I2C_END_RD    = 14'b1 << 13;
-   parameter I2C_END_RD2   = 14'b1 << 14;
-   parameter I2C_WAITSTOP  = 14'b1 << 15;
+   parameter I2C_START     = 16'b1 << 0; // should only pass through this state for one cycle
+   parameter I2C_RESTART   = 16'b1 << 1;
+   parameter I2C_DADDR     = 16'b1 << 2;
+   parameter I2C_ACK_DADDR = 16'b1 << 3;
+   parameter I2C_WR_DATA   = 16'b1 << 4;
+   parameter I2C_ACK_WR    = 16'b1 << 5;
+   parameter I2C_END_WR    = 16'b1 << 6;
+   parameter I2C_RD_DATA   = 16'b1 << 7;
+   parameter I2C_ACK_RD    = 16'b1 << 8;
+   parameter I2C_END_RD    = 16'b1 << 9;
+   parameter I2C_END_RD2   = 16'b1 << 10;
+   parameter I2C_WAITSTOP  = 16'b1 << 11;
+   parameter I2C_RXD_SYN   = 16'b1 << 12;
+   parameter I2C_RXD_ACK   = 16'b1 << 13;
+   parameter I2C_TXD_SYN   = 16'b1 << 14;
+   parameter I2C_TXD_ACK   = 16'b1 << 15;
 
    parameter I2C_nSTATES = 16;
 
@@ -304,9 +304,7 @@ module i2c_core (
 	   end
 	   I2C_RXD_ACK: begin // wait for coretest ack
               if (rxd_ack)
-		begin
-		   rxd_syn_reg <= 0;
-		end
+		 rxd_syn_reg <= 0;
 	   end
 	   I2C_ACK_WR: begin
 	      SDA_pd <= 1'b1;  // active pull down ACK
@@ -325,17 +323,14 @@ module i2c_core (
 
 	   // read branch
 	   I2C_TXD_SYN: begin // get data from the coretest bus
-              if (txd_syn)
-		begin
-		   I2C_rdata <= txd_data;
-                   txd_ack_reg <= 1;
-		end
+              if (txd_syn) begin
+		 I2C_rdata <= txd_data;
+		 txd_ack_reg <= 1;
+	      end
 	   end
 	   I2C_TXD_ACK: begin // send coretest ack
               if (!txd_syn)
-		begin
-                   txd_ack_reg <= 0;
-		end
+		 txd_ack_reg <= 0;
 	   end
 	   I2C_RD_DATA: begin // shift out data on falling edges of clock
 	      SDA_pd <= I2C_rdata[7] ? 1'b0 : 1'b1;



More information about the Commits mailing list