赞
踩
实现FPGA与EEPROM的通信,要求FPGA对EEPROM实现先“写”后“读”,读出的值给uart发送端并显示到电脑上,按下按键1让fpga对EEPROM写入数据;按下按键2让fpga读出对EEPROM写入过的数据。
- `timescale 1ns / 1ps
- module key(
- input sys_clk ,
- input rst_n ,
- (* MARK_DEBUG="true" *)input key1 ,
- (* MARK_DEBUG="true" *)input key2 ,
- (* MARK_DEBUG="true" *)output key_flag_1 ,
- (* MARK_DEBUG="true" *)output key_flag_2
-
- );
- parameter delay = 20'd1_000_000 ; //20ms=20_000_000 20_000_000/20 == 10_000_00
- reg[19:0] cnt1 ;
- reg[19:0] cnt2 ;
-
- always@(posedge sys_clk )
- if(!rst_n)
- cnt1 <= 0 ;
- else if ( key1 == 0 )begin
- if ( cnt1 == delay -1 )
- cnt1 <= cnt1 ;
- else
- cnt1 <= cnt1 +1 ;
- end
- else
- cnt1 <= 0 ;
-
- always@(posedge sys_clk )
- if(!rst_n)
- cnt2 <= 0 ;
- else if ( key2 == 0 )begin
- if ( cnt2 == delay -1 )
- cnt2 <= cnt2 ;
- else
- cnt2 <= cnt2 +1 ;
- end
- else
- cnt2 <= 0 ;
-
-
- assign key_flag_1 = ( cnt1 == delay -2 )?1:0 ;
- assign key_flag_2 = ( cnt2 == delay -2 )?1:0 ;
-
-
- endmodule
- `timescale 1ns / 1ps
- module data_generate(
- input sys_clk ,
- input rst_n ,
- input iic_end ,
- input key_flag_1 ,
- input key_flag_2 ,
- (* MARK_DEBUG="true" *)output reg wr_en ,
- (* MARK_DEBUG="true" *)output reg rd_en ,
- (* MARK_DEBUG="true" *)output reg iic_start //按键消抖后延迟1000个时钟周期
- );
-
- always@(posedge sys_clk )
- if(!rst_n)
- wr_en <= 0 ;
- else if ( key_flag_1 )
- wr_en <= 1 ;
- else if ( iic_end )
- wr_en <= 0 ;
- else
- wr_en <= wr_en ;
-
- always@(posedge sys_clk )
- if(!rst_n)
- rd_en <= 0 ;
- else if ( key_flag_2 )
- rd_en <= 1 ;
- else if ( iic_end )
- rd_en <= 0 ;
- else
- rd_en <= rd_en ;
-
- ///cnt
- parameter TIME_COUNT = 10'd1000 ;
- (* MARK_DEBUG="true" *)reg[9:0] cnt ;
-
- always@(posedge sys_clk )
- if(!rst_n )
- cnt <= 0 ;
- else if ( wr_en || rd_en )begin
- if ( cnt == TIME_COUNT -1 )
- cnt <= cnt ;
- else
- cnt <= cnt +1 ;
- end
- else
- cnt <= 0 ;
-
- iic_start
- always@(posedge sys_clk )
- if(!rst_n)
- iic_start <= 0 ;
- else if ( cnt == TIME_COUNT -2 )
- iic_start <= 1 ;
- else
- iic_start <= 0 ;
-
- endmodule
- `timescale 1ns / 1ps
- module IIC_2
- #(
- parameter SYSCLK = 50_000_000 ,
- IIC_CLK = 400_000 ,
- DEVICE_ID = 7'b1010_000
- )
- (
- input sysclk ,
- input rst_n ,
- input [7:0] data_in ,
- input [7:0] addr ,
- input iic_start , 尖峰脉冲
- input wr_en , ///按键1按下触发
- input rd_en , ///按键2按下触发
- (* MARK_DEBUG="true" *)output tx_start ,
- (* MARK_DEBUG="true" *)output reg [7:0] rd_data ,
- (* MARK_DEBUG="true" *)output reg SCL ,
- (* MARK_DEBUG="true" *)inout SDA ,
- (* MARK_DEBUG="true" *)output iic_end /尖峰脉冲
- );
- localparam DELAY = SYSCLK/IIC_CLK ;
- //三态门
- wire sda_en ; ///SDA先作为输出时候的使能信号线
- wire sda_in ; 从机给主机的数据线
- reg sda_out ; /主机给从机的数据线
- assign SDA = (sda_en == 1) ? sda_out : 1'bz ;
- assign sda_in = SDA;
- 状态机
- localparam IDLE = 4'd0 ,
- START1 = 4'd1 ,
- SEND_DEVICE_W = 4'd2 ,
- ACK1 = 4'd3 ,
- SEND_ADDR_W = 4'd4 ,
- ACK2 = 4'd5 ,
- SEND_DATA_W = 4'd6 ,
- ACK3 = 4'd7 ,
- STOP = 4'd8 ,
-
- START2 = 4'd9 ,
- SEND_DEVICE_R = 4'd10 ,
- ACK4 = 4'd11 ,
- READ_DATA = 4'd12 ,
- NOACK = 4'd13 ;
- (* MARK_DEBUG="true" *)reg [3:0] cur_state ;
- reg [3:0] next_state ;
- (* MARK_DEBUG="true" *)reg [7:0] cnt ;
- (* MARK_DEBUG="true" *)reg [2:0] cnt_bit ;
- (* MARK_DEBUG="true" *)reg ack_flag ;
- assign sda_en = (cur_state == ACK1 || cur_state == ACK2 ||
- cur_state == ACK3 || cur_state == ACK4 || cur_state == READ_DATA) ? 0 : 1;
- assign tx_start = (cur_state == READ_DATA && cnt_bit == 7 && cnt == DELAY - 1) ? 1 : 0;
- assign iic_end = (cur_state == STOP && cnt == DELAY - 1) ? 1 : 0;
- /state1
- always@(posedge sysclk)
- if(!rst_n)
- cur_state <= IDLE;
- else
- cur_state <= next_state;
- /state2
- always@(*)
- case(cur_state)
- IDLE : begin
- if(iic_start == 1)
- next_state = START1;
- else
- next_state = cur_state;
- end
- START1 :begin
- if(cnt == DELAY - 1)
- next_state = SEND_DEVICE_W;
- else
- next_state = cur_state;
- end
- SEND_DEVICE_W :begin
- if(cnt == DELAY - 1 && cnt_bit == 7)
- next_state = ACK1;
- else
- next_state = cur_state;
- end
- ACK1 :begin
- if(cnt == DELAY - 1 && ack_flag == 0) /应答有效
- next_state = SEND_ADDR_W;
- else if(cnt == DELAY - 1 && ack_flag == 1) /应答无效
- next_state = IDLE;
- else
- next_state = cur_state;
- end
- SEND_ADDR_W :begin
- if(cnt == DELAY - 1 && cnt_bit == 7)
- next_state = ACK2;
- else
- next_state = cur_state;
- end
- ACK2 :begin
- if(cnt == DELAY - 1 && ack_flag == 0 && wr_en) /应答有效
- next_state = SEND_DATA_W;
- else if(cnt == DELAY - 1 && ack_flag == 0 && rd_en) /应答有效
- next_state = START2;
- else if(cnt == DELAY - 1 && ack_flag == 1) /应答无效
- next_state = IDLE;
- else
- next_state = cur_state;
- end
- SEND_DATA_W :begin
- if(cnt == DELAY - 1 && cnt_bit == 7)
- next_state = ACK3;
- else
- next_state = cur_state;
- end
- ACK3 :begin
- if(cnt == DELAY - 1 && ack_flag == 0) /应答有效
- next_state = STOP;
- else if(cnt == DELAY - 1 && ack_flag == 1) /应答无效
- next_state = IDLE;
- else
- next_state = cur_state;
- end
- STOP :begin
- if(cnt == DELAY - 1)
- next_state = IDLE;
- else
- next_state = cur_state;
- end
- START2 : begin
- if(cnt == DELAY - 1)
- next_state = SEND_DEVICE_R;
- else
- next_state = cur_state;
- end
- SEND_DEVICE_R :begin
- if(cnt == DELAY - 1 && cnt_bit == 7)
- next_state = ACK4;
- else
- next_state = cur_state;
- end
- ACK4 :begin
- if(cnt == DELAY - 1 && ack_flag == 0) /应答有效
- next_state = READ_DATA;
- else if(cnt == DELAY - 1 && ack_flag == 1) /应答无效
- next_state = IDLE;
- else
- next_state = cur_state;
- end
- READ_DATA :begin
- if(cnt == DELAY - 1 && cnt_bit == 7)
- next_state = NOACK;
- else
- next_state = cur_state;
- end
- NOACK :begin
- if(cnt == DELAY - 1)
- next_state = STOP;
- else
- next_state = cur_state;
- end
- default:next_state = IDLE;
- endcase
- state3
- always@(posedge sysclk)
- if(!rst_n)begin
- cnt <= 0;
- cnt_bit <= 0;
- sda_out <= 1; 空闲为1
- SCL <= 1;空闲为1
- ack_flag <= 1; 无效应答
- rd_data <= 0;
- end
- else
- case(cur_state)
- IDLE :begin
- rd_data <= 0;
- cnt <= 0;
- cnt_bit <= 0;
- sda_out <= 1;
- SCL <= 1;
- ack_flag <= 1;
- end
- START1 :begin
- ack_flag <= 1;
- if(cnt >= DELAY*3/4 - 1)
- SCL <= 0;
- else
- SCL <= 1;
- if(cnt >= DELAY/2 - 1)
- sda_out <= 0;
- else
- sda_out <= 1;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
- SEND_DEVICE_W :begin 先发最高位 0-7 0-6 7
- ack_flag <= 1;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- if(cnt_bit >=0 && cnt_bit < 7)
- sda_out <= DEVICE_ID[6-cnt_bit];
- else /cnt_bit == 7
- sda_out <= 0; //写标志位
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- if(cnt == DELAY - 1)
- cnt_bit <= cnt_bit + 1;
- else
- cnt_bit <= cnt_bit;
- end
- ACK1 :begin /从机给主机数据
- if(cnt == DELAY/2 - 1)
- ack_flag <= sda_in ;
- else
- ack_flag <= ack_flag;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= 1;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
- SEND_ADDR_W :begin
- ack_flag <= 1;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= addr[7-cnt_bit];
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- if(cnt == DELAY - 1)
- cnt_bit <= cnt_bit + 1;
- else
- cnt_bit <= cnt_bit;
- end
- ACK2 :begin
- if(cnt == DELAY/2 - 1)
- ack_flag <= sda_in ;
- else
- ack_flag <= ack_flag;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= 1;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
- SEND_DATA_W :begin
- ack_flag <= 1;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= data_in[7-cnt_bit];
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- if(cnt == DELAY - 1)
- cnt_bit <= cnt_bit + 1;
- else
- cnt_bit <= cnt_bit;
- end
- ACK3 :begin
- if(cnt == DELAY/2 - 1)
- ack_flag <= sda_in ;
- else
- ack_flag <= ack_flag;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= 1;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
- STOP :begin
- ack_flag <= 1;
- if(cnt >= DELAY/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- if(cnt >= DELAY/2 - 1)
- sda_out <= 1;
- else
- sda_out <= 0;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
-
- START2 :begin
- ack_flag <= 1;
- if(cnt >= DELAY*3/4 - 1)
- SCL <= 0;
- else
- SCL <= 1;
- if(cnt >= DELAY/2 - 1)
- sda_out <= 0;
- else
- sda_out <= 1;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
- SEND_DEVICE_R :begin
- ack_flag <= 1;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- if(cnt_bit >=0 && cnt_bit < 7)
- sda_out <= DEVICE_ID[6-cnt_bit];
- else /cnt_bit == 7
- sda_out <= 1; //读标志位
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- if(cnt == DELAY - 1)
- cnt_bit <= cnt_bit + 1;
- else
- cnt_bit <= cnt_bit;
- end
- ACK4 :begin
- if(cnt == DELAY/2 - 1)
- ack_flag <= sda_in ;
- else
- ack_flag <= ack_flag;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= 1;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
- READ_DATA :begin
- if(cnt == DELAY/2 - 1)
- // rd_data[7-cnt_bit] <= sda_in; /法1
- rd_data <= {rd_data[6:0],sda_in}; 法2
- else
- rd_data <= rd_data;
- ack_flag <= 1;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= 1;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- if(cnt == DELAY - 1)
- cnt_bit <= cnt_bit + 1;
- else
- cnt_bit <= cnt_bit;
- end
- NOACK :begin
- ack_flag <= 1;
- if(cnt >= DELAY/4 - 1 && cnt <= DELAY*3/4 - 1)
- SCL <= 1;
- else
- SCL <= 0;
- sda_out <= 1;
- cnt_bit <= 0;
- if(cnt == DELAY - 1)
- cnt <= 0;
- else
- cnt <= cnt + 1;
- end
- endcase
- endmodule
- `timescale 1ns / 1ps
- module uart_tx(
- input sys_clk ,
- input rst_n ,
- input tx_start ,
- (* MARK_DEBUG="true" *) input [7:0] rd_data ,
- (* MARK_DEBUG="true" *)output reg tx_data ,
- output reg tx_done
- );
- parameter SYSCLK = 50_000_000 ;
- parameter Baud = 115200 ;
- parameter COUNT = SYSCLK/Baud;
- parameter MID = COUNT/2 ;
-
-
-
- //start_flag
- reg tx_reg1 ;
- reg tx_reg2 ;
- (* MARK_DEBUG="true" *)wire start_flag ;
-
- always@(posedge sys_clk )
- if(!rst_n)begin
- tx_reg1 <= 0 ;
- tx_reg2 <= 0 ;
- end
- else
- begin
- tx_reg1 <= tx_start ;
- tx_reg2 <= tx_reg1 ;
- end
- assign start_flag = tx_reg1 & ~tx_reg2 ;
-
- //tx_flag
- (* MARK_DEBUG="true" *) reg tx_flag ;
- (* MARK_DEBUG="true" *) reg [9:0] cnt ;
- (* MARK_DEBUG="true" *) reg [4:0] cnt_bit ; //0 12345678 9 10
-
- always@(posedge sys_clk )
- if(!rst_n)
- tx_flag <= 0 ;
- else if ( start_flag )
- tx_flag <= 1 ;
- else if ( cnt == COUNT -1 && cnt_bit == 10 )
- tx_flag <= 0 ;
- else
- tx_flag <= tx_flag ;
-
- //cnt
- always@(posedge sys_clk )
- if(!rst_n)
- cnt <= 0 ;
- else if ( tx_flag )begin
- if ( cnt == COUNT -1 )
- cnt <= 0 ;
- else
- cnt <= cnt +1 ;
- end
- else
- cnt <= 0 ;
-
- //cnt_bit
- always@(posedge sys_clk )
- if(!rst_n)
- cnt_bit <= 0 ;
- else if ( tx_flag )begin
- if ( cnt == COUNT -1 )begin
- if ( cnt_bit == 10 )
- cnt_bit <= 0 ;
- else
- cnt_bit <= cnt_bit +1 ;
- end
- else
- cnt_bit <= cnt_bit ;
- end
- else
- cnt_bit <= 0 ;
-
-
- //寄存rd_data rd_data随着cur_state变为STOP后清零,在uart_tx模块
- //中,cnt_bit == 0 的时候可以捕捉到数据
- (* MARK_DEBUG="true" *) reg[7:0] data_reg ;
- always@(posedge sys_clk )
- if(!rst_n)
- data_reg <= 0 ;
- else if ( tx_flag )begin
- if ( cnt_bit == 0 && cnt == MID -1 )
- data_reg <= rd_data ;
- else
- data_reg <= data_reg ;
- end
- else
- data_reg <= data_reg ;
-
-
-
- //tx_data
- parameter MODE_CHECK = 0 ;
- always@(posedge sys_clk )
- if(!rst_n) //cnt_bit: 0 12345678 9 10
- tx_data <= 0 ; //rd_data: 01234567
- else if ( tx_flag )begin
- if ( cnt_bit > 0 && cnt_bit <9 )
- tx_data <= data_reg [ cnt_bit -1 ] ;
- else if ( cnt_bit == 0 )
- tx_data <= 0 ;
- else if ( cnt_bit == 10 )
- tx_data <= 1 ;
- else if ( cnt_bit == 9 )
- tx_data <= (MODE_CHECK == 0 )? ^rd_data : ~^rd_data ;
- else
- tx_data <= tx_data ;
- end
- else
- tx_data <= 1 ;
-
- //tx_done
- always@(posedge sys_clk )
- if(!rst_n)
- tx_done <= 0 ;
- else if ( tx_flag )begin
- if ( cnt == COUNT -1 && cnt_bit == 10 )
- tx_done <= 1 ;
- else
- tx_done <= 0 ;
- end
- else
- tx_done <= 0 ;
-
-
-
-
-
-
-
-
-
- endmodule
- `timescale 1ns / 1ps
- module IIC_TOP(
- input sys_clk ,
- input rst_n ,
- input key1 ,
- input key2 ,
- output tx_data ,
- output SCL ,
- inout SDA
- );
- key
- wire key_flag_1 ;
- wire key_flag_2 ;
- key key_u1(
- . sys_clk (sys_clk ) ,
- . rst_n (rst_n ) ,
- . key1 (key1 ) ,
- . key2 (key2 ) ,
- . key_flag_1 (key_flag_1 ) ,
- . key_flag_2 (key_flag_2 )
-
- );
-
- ///data_generate
- wire iic_end ;
- wire wr_en ;
- wire rd_en ;
- wire iic_start ;
-
- data_generate data_generate_u1(
- . sys_clk (sys_clk ) ,
- . rst_n (rst_n ) ,
- . iic_end (iic_end ) ,
- . key_flag_1 (key_flag_1) ,
- . key_flag_2 (key_flag_2) ,
- . wr_en (wr_en ) ,
- . rd_en (rd_en ) ,
- . iic_start (iic_start ) //按键消抖后延迟1000个时钟周期
- );
-
- IIC
- wire tx_start ;
- wire [7:0] rd_data ;
- IIC_2
- #(
- . SYSCLK (50_000_000 ) ,
- . IIC_CLK (400_000 ) ,
- . DEVICE_ID (7'b1010_000)
- )
- IIC_2_u1(
- . sysclk (sys_clk) ,
- . rst_n (rst_n ) ,
- . data_in (8'h45) ,
- . addr (8'h12) ,
- . iic_start (iic_start) , 尖峰脉冲
- . wr_en (wr_en ) , ///按键1按下触发
- . rd_en (rd_en ) , ///按键2按下触发
- . tx_start (tx_start) ,
- . rd_data (rd_data ) ,
- . SCL (SCL ) ,
- . SDA (SDA ) ,
- . iic_end (iic_end ) /尖峰脉冲
- );
-
- ///uart_tx
- wire tx_done ;
- uart_tx uart_tx_u1(
- . sys_clk (sys_clk ) ,
- . rst_n (rst_n ) ,
- . tx_start (tx_start) ,
- . rd_data (rd_data ) ,
- . tx_data (tx_data ) ,
- . tx_done (tx_done )
- );
-
-
-
-
-
-
-
- endmodule
- set_property IOSTANDARD LVCMOS33 [get_ports key1]
- set_property IOSTANDARD LVCMOS33 [get_ports key2]
- set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
- set_property IOSTANDARD LVCMOS33 [get_ports SCL]
- set_property IOSTANDARD LVCMOS33 [get_ports SDA]
- set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
- set_property IOSTANDARD LVCMOS33 [get_ports tx_data]
- set_property PACKAGE_PIN M19 [get_ports key1]
- set_property PACKAGE_PIN M20 [get_ports key2]
- set_property PACKAGE_PIN P15 [get_ports rst_n]
- set_property PACKAGE_PIN F19 [get_ports SCL]
- set_property PACKAGE_PIN F20 [get_ports SDA]
- set_property PACKAGE_PIN K17 [get_ports sys_clk]
- set_property PACKAGE_PIN U18 [get_ports tx_data]
然后点set up debug
XDC文件变成这样就是保存成功了
- set_property IOSTANDARD LVCMOS33 [get_ports key1]
- set_property IOSTANDARD LVCMOS33 [get_ports key2]
- set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
- set_property IOSTANDARD LVCMOS33 [get_ports SCL]
- set_property IOSTANDARD LVCMOS33 [get_ports SDA]
- set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
- set_property IOSTANDARD LVCMOS33 [get_ports tx_data]
- set_property PACKAGE_PIN M19 [get_ports key1]
- set_property PACKAGE_PIN M20 [get_ports key2]
- set_property PACKAGE_PIN P15 [get_ports rst_n]
- set_property PACKAGE_PIN F19 [get_ports SCL]
- set_property PACKAGE_PIN F20 [get_ports SDA]
- set_property PACKAGE_PIN K17 [get_ports sys_clk]
- set_property PACKAGE_PIN U18 [get_ports tx_data]
-
-
- create_debug_core u_ila_0 ila
- set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
- set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
- set_property C_ADV_TRIGGER false [get_debug_cores u_ila_0]
- set_property C_DATA_DEPTH 4096 [get_debug_cores u_ila_0]
- set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_0]
- set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
- set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
- set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
- set_property port_width 1 [get_debug_ports u_ila_0/clk]
- connect_debug_port u_ila_0/clk [get_nets [list sys_clk_IBUF_BUFG]]
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
- set_property port_width 8 [get_debug_ports u_ila_0/probe0]
- connect_debug_port u_ila_0/probe0 [get_nets [list {IIC_2_u1/cnt[0]} {IIC_2_u1/cnt[1]} {IIC_2_u1/cnt[2]} {IIC_2_u1/cnt[3]} {IIC_2_u1/cnt[4]} {IIC_2_u1/cnt[5]} {IIC_2_u1/cnt[6]} {IIC_2_u1/cnt[7]}]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
- set_property port_width 3 [get_debug_ports u_ila_0/probe1]
- connect_debug_port u_ila_0/probe1 [get_nets [list {IIC_2_u1/cnt_bit[0]} {IIC_2_u1/cnt_bit[1]} {IIC_2_u1/cnt_bit[2]}]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
- set_property port_width 4 [get_debug_ports u_ila_0/probe2]
- connect_debug_port u_ila_0/probe2 [get_nets [list {IIC_2_u1/cur_state[0]} {IIC_2_u1/cur_state[1]} {IIC_2_u1/cur_state[2]} {IIC_2_u1/cur_state[3]}]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
- set_property port_width 10 [get_debug_ports u_ila_0/probe3]
- connect_debug_port u_ila_0/probe3 [get_nets [list {data_generate_u1/cnt[0]} {data_generate_u1/cnt[1]} {data_generate_u1/cnt[2]} {data_generate_u1/cnt[3]} {data_generate_u1/cnt[4]} {data_generate_u1/cnt[5]} {data_generate_u1/cnt[6]} {data_generate_u1/cnt[7]} {data_generate_u1/cnt[8]} {data_generate_u1/cnt[9]}]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
- set_property port_width 8 [get_debug_ports u_ila_0/probe4]
- connect_debug_port u_ila_0/probe4 [get_nets [list {uart_tx_u1/rd_data[0]} {uart_tx_u1/rd_data[1]} {uart_tx_u1/rd_data[2]} {uart_tx_u1/rd_data[3]} {uart_tx_u1/rd_data[4]} {uart_tx_u1/rd_data[5]} {uart_tx_u1/rd_data[6]} {uart_tx_u1/rd_data[7]}]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
- set_property port_width 8 [get_debug_ports u_ila_0/probe5]
- connect_debug_port u_ila_0/probe5 [get_nets [list {IIC_2_u1/rd_data[0]} {IIC_2_u1/rd_data[1]} {IIC_2_u1/rd_data[2]} {IIC_2_u1/rd_data[3]} {IIC_2_u1/rd_data[4]} {IIC_2_u1/rd_data[5]} {IIC_2_u1/rd_data[6]} {IIC_2_u1/rd_data[7]}]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
- set_property port_width 1 [get_debug_ports u_ila_0/probe6]
- connect_debug_port u_ila_0/probe6 [get_nets [list IIC_2_u1/ack_flag]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
- set_property port_width 1 [get_debug_ports u_ila_0/probe7]
- connect_debug_port u_ila_0/probe7 [get_nets [list IIC_2_u1/iic_end]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
- set_property port_width 1 [get_debug_ports u_ila_0/probe8]
- connect_debug_port u_ila_0/probe8 [get_nets [list data_generate_u1/iic_start]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
- set_property port_width 1 [get_debug_ports u_ila_0/probe9]
- connect_debug_port u_ila_0/probe9 [get_nets [list key_u1/key1]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe10]
- set_property port_width 1 [get_debug_ports u_ila_0/probe10]
- connect_debug_port u_ila_0/probe10 [get_nets [list key_u1/key2]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe11]
- set_property port_width 1 [get_debug_ports u_ila_0/probe11]
- connect_debug_port u_ila_0/probe11 [get_nets [list key_u1/key_flag_1]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe12]
- set_property port_width 1 [get_debug_ports u_ila_0/probe12]
- connect_debug_port u_ila_0/probe12 [get_nets [list key_u1/key_flag_2]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe13]
- set_property port_width 1 [get_debug_ports u_ila_0/probe13]
- connect_debug_port u_ila_0/probe13 [get_nets [list data_generate_u1/rd_en]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe14]
- set_property port_width 1 [get_debug_ports u_ila_0/probe14]
- connect_debug_port u_ila_0/probe14 [get_nets [list IIC_2_u1/SCL]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe15]
- set_property port_width 1 [get_debug_ports u_ila_0/probe15]
- connect_debug_port u_ila_0/probe15 [get_nets [list IIC_2_u1/SDA_IBUF]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe16]
- set_property port_width 1 [get_debug_ports u_ila_0/probe16]
- connect_debug_port u_ila_0/probe16 [get_nets [list IIC_2_u1/SDA_OBUF]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe17]
- set_property port_width 1 [get_debug_ports u_ila_0/probe17]
- connect_debug_port u_ila_0/probe17 [get_nets [list uart_tx_u1/tx_data]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe18]
- set_property port_width 1 [get_debug_ports u_ila_0/probe18]
- connect_debug_port u_ila_0/probe18 [get_nets [list IIC_2_u1/tx_start]]
- create_debug_port u_ila_0 probe
- set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe19]
- set_property port_width 1 [get_debug_ports u_ila_0/probe19]
- connect_debug_port u_ila_0/probe19 [get_nets [list data_generate_u1/wr_en]]
- set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
- set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
- set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
- connect_debug_port dbg_hub/clk [get_nets sys_clk_IBUF_BUFG]
"4"对应后面几个cnt_bit
按下控制“写”的按键,再按下“读”的按键后,pc端返回45
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。