找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3985|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

我的數(shù)字電位器FPGA verilog i2c控制設(shè)計(jì) 含源碼文檔原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:429897 發(fā)表于 2019-2-14 14:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
數(shù)字電位器的型號是tpl0102
我所做的內(nèi)容是用iSe14.7設(shè)計(jì)一個(gè)i2c,來控制它輸出電阻的大小;
總阻值是100KΩ;
  1. `timescale 1ns / 1ns
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    08:59:53 02/12/2019
  7. // Design Name:
  8. // Module Name:    IIC
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module IIC(
  22.                 clk_sys,
  23.                 rst_n,
  24.                 //key_wr,
  25.                 //key_rd,
  26.                 eeprom_scl,
  27.                 //led,
  28.                 eeprom_sda
  29. );

  30. input clk_sys;
  31. input rst_n;
  32. //input key_rd;
  33. //input key_wr;

  34. output reg eeprom_scl;
  35. //output [3:0] led;                        

  36. //output reg [7:0] result; //256
  37. //output reg led;

  38. inout  eeprom_sda;

  39. //reg [3:0] led;
  40. reg clk;
  41. reg [7:0] cnt;//256
  42. reg [7:0] state;//256
  43. reg [3:0] counter;//16
  44. reg link_sda;
  45. reg wr;
  46. //reg rd;
  47. reg sda_buf;

  48. reg [7:0] data;
  49. //reg [24:0] Cl; // C1 延時(shí)計(jì)數(shù)器
  50. //wire C1_Clk;   // 產(chǎn)生一個(gè)脈動(dòng)時(shí)鐘
  51. //assign Cl_Clk = (Cl == 25'd24999999 ) ? 1 : 0;
  52. assign eeprom_sda = (link_sda)?sda_buf:1'hz;
  53. always @ ( negedge clk_sys or negedge rst_n)
  54.         begin
  55.                 if(!rst_n)
  56.                         begin       
  57.                                 clk <= 0;
  58.                                 cnt <= 0;
  59.                                 //Cl  <= 0;
  60.                         end
  61.                 else
  62.                         begin
  63.                                 if(cnt<249)
  64.                                         cnt <= cnt + 1'b1;
  65.                                 else
  66.                                         begin
  67.                                                 clk <= ~clk;
  68.                                                 cnt <= 0;
  69.                                         end
  70.                                 //if(Cl<25'd24999999)Cl <= Cl + 1'b1;
  71.                                 //else Cl <= 25'd0;
  72.                         end
  73.         end//250*20ns=5000ns=5us=200KHZ;5us*2=10Us=100KHZ;
  74.        
  75. always @(negedge clk or negedge rst_n)
  76.         begin
  77.                 if(!rst_n)
  78.                         begin
  79.                                 eeprom_scl <= 0;
  80.                         end
  81.                 else
  82.                         eeprom_scl <= ~eeprom_scl;
  83.         end//50KHz=20us=20000ns
  84.        
  85. always @ (posedge clk or negedge rst_n)
  86.         begin
  87.                 if(!rst_n)
  88.                         begin
  89.                                 state <= 0;
  90.                                 link_sda <= 0;
  91.                                 sda_buf <= 0;
  92.                                 counter <= 0;
  93.                                 wr <= 1;
  94.                                 //led = 1;
  95.                                 //rd <= 0;
  96.                                 //result <= 0;
  97.                                 data <= 0;
  98.                                 //led <= 4'b0001;
  99.                         end
  100.                 else
  101.                         begin
  102.                                         case(state)
  103.                                                 0:begin
  104.                                                                 wr <= 1;
  105.                                                         if(!eeprom_scl)
  106.                                                                 begin
  107.                                                                         link_sda <= 1;
  108.                                                                         sda_buf <= 1;
  109.                                                                         state <= 1;
  110.                                                                 end
  111.                                                 end
  112.                                                
  113.                                                 1:begin
  114.                                                         if(eeprom_scl)
  115.                                                                 begin
  116.                                                                         sda_buf <= 0;
  117.                                                                         state <= 2;
  118.                                                                         data <= 8'b10100000;
  119.                                                                        
  120.                                                                 end
  121.                                                 end
  122.                                                
  123.                                                 2:begin
  124.                                                         if((counter<8)&&(!eeprom_scl))
  125.                                                                 begin
  126.                                                                         counter <= counter + 1'b1;
  127.                                                                         data <= {data[6:0],data[7]};
  128.                                                                         sda_buf <= data[7];
  129.                                                                 end
  130.                                                         else if((counter == 8)&&(!eeprom_scl))
  131.                                                                 begin
  132.                                                                         counter <= 0;
  133.                                                                         state <= 3;
  134.                                                                         link_sda <= 0;
  135.                                                                 end
  136.                                                         end
  137.                                                        
  138.                                                 3:begin
  139.                                                         if(eeprom_scl)
  140.                                                                 begin
  141.                                                                         if(!eeprom_sda)
  142.                                                                                 begin
  143.                                                                                         state <= 4;
  144.                                                                                         data <= 8'h00;//μ??·
  145.                                                                                 end
  146.                                                                 end
  147.                                                        
  148.                                                 end
  149.                                                
  150.                                                 4:begin
  151.                                                         link_sda <= 1;
  152.                                                         if((counter < 8)&&(!eeprom_scl))
  153.                                                                 begin
  154.                                                                         counter <= counter + 1'b1;
  155.                                                                         data <= {data[6:0],data[7]};
  156.                                                                         sda_buf <= data[7];
  157.                                                                 end
  158.                                                         else if ((counter == 8)&&(!eeprom_scl))
  159.                                                                 begin
  160.                                                                                         counter <= 0;
  161.                                                                                         state <= 5;
  162.                                                                                         link_sda <= 0;
  163.                                                                                         sda_buf <= 1;
  164.                                                                 end
  165.                                                 end//
  166.                                                
  167.                                                 5:begin
  168.                                                         if(eeprom_scl)
  169.                                                                 begin
  170.                                                                         if(!eeprom_sda)
  171.                                                                                 begin
  172.                                                                                         if(wr == 1)
  173.                                                                                        
  174.                                                                                         begin
  175.                                                                                                 state <= 6;
  176.                                                                                         end
  177.                                                                                         data <= 8'b00000101;//
  178.                                                                                 end
  179.                                                                 end
  180.                                                 end
  181.                                                
  182.                                                 6:begin
  183.                                                         link_sda <= 1;
  184.                                                         if((counter < 8)&&(!eeprom_scl))
  185.                                                                 begin
  186.                                                                         counter <= counter + 1'b1;
  187.                                                                    data <= {data[6:0], data[7]};
  188.                                                                         sda_buf <= data[7];
  189.                                                                 end
  190.                                                         else if((counter == 8)&&(!eeprom_scl))
  191.                                                                         begin
  192.                                                                                 counter <= 0;
  193.                                                                                 state <= 7;
  194.                                                                                 link_sda <= 0;
  195.                                                                         end
  196.                                            end
  197.                                                
  198.                                                 7:begin
  199.                                                         if(eeprom_scl)
  200.                                                                 begin
  201.                                                                         if(!eeprom_sda)
  202.                                                                                 state <= 8;
  203.                                                                 end
  204.                                                                                
  205.                                                 end
  206.                                                
  207.                                                 8:begin
  208.                                                         link_sda <= 1;
  209.                                                         sda_buf <= 0;//先拉低,再拉高;
  210.                                                         if(eeprom_scl)
  211.                                                          begin
  212.                                                                 //led <= 0;
  213.                                                                 sda_buf <= 1;
  214.                                                                 state <= 0;
  215.                                                                    //wr <= 0;
  216.                                                                 //led <= 4'b0100;
  217.                                                                 //led[0] <= 1;
  218.                                                                 //led[1] <= 0;
  219.                                                          end
  220.                                                          //if(Cl_Clk)led[3] <= ~led[3];
  221.                                                 end
  222.                                         default : state <= 0;
  223.                                         endcase
  224.                                 end
  225.                 end
  226. endmodule       
復(fù)制代碼



tpl0102-ep.pdf

1.07 MB, 下載次數(shù): 27, 下載積分: 黑幣 -5

煉獄傳奇-IIC之戰(zhàn).pdf

934.5 KB, 下載次數(shù): 26, 下載積分: 黑幣 -5

IIC.zip

232.27 KB, 下載次數(shù): 32, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:15726 發(fā)表于 2020-9-13 19:31 | 只看該作者
學(xué)習(xí)一下IIC知識,感謝分享。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表