zoukankan      html  css  js  c++  java
  • 关于HPI时序的总结

    1、利用状态机的思想,将复杂的问题状态分清楚,(非诚勿扰有一个女博士曾谈到她IQ高,她喜欢对事物进行分类,分类的思想很重要)

    2、参考资料利用

      (1)芯片用的是美国TI公司的TMS320C6713B,在看了官网提供的PDF后,有几个问题没看懂,没太注意

        a、‡ P = 1/CPU clock frequency in ns. For example, when running parts at 225 MHz, use P = 4.4 ns.

     

        

     后来才发现这个问题是导致几天来没有发现的关键致命问题。下面一段话来之互联网:

          “C6713 HPI在读写过程中,选通信号有效周期(低电平)最小时间要求4个CPU周期,失效周期(高电平)最小时间也要4个CPU周期。在HPI启动模式时,PLL将启动于bypass mode,CPU将操作与CLKIN频率。以20MHz CLKIN为例,HPI选通时间应该大于200ns,在你的屏幕截图中,你使用25ns选通宽度,这需要CLKIN有160MHz或者更高。这能满足条件吗?6713数据手册定义了HPI时序:HSTRB应该保持低有效至少4个DSP时钟周期,即40MHz时等于100ns。两次HPI存取的延迟时间idle time也是4个DSP时钟周期,即HSTRB失效周期至少也是100ns。这个延迟时间在所有HPI传送中间都是必需的,在第一个半字和第二个半字之间是均等的。对DSP的目标存储器和源存储器的存取不影响这个基本的HPI时序。HPI选通不是一个时钟源,它是异步输入的。DSP内部将把HPI信号与它的时钟同步起来。这是最少4个周期限制的原因所在。如果你违反这个时序,DSP可能不会正确完成HPI存取。如果你的主机是FPGA,基本的HPI时序用状态机来表示会更容易达到恰当的时钟要求。”

        b、在看了TMS320C6713B的官网资料和时序图后,又查阅了《TMS320C674x/OMAP-L1x Processor Host Port Interface (HPI) User's Guide》,其实TMS320C6713B和TMS320C674X的HCNTL的控制还有点儿区别

    (2)芯片型号确认好,参考资料对应好是一个不能够忽视的问题

    3、对于时序图来说,首先要看懂时序,还要注意时序图中标明的时序约束以及一些注释,往往小的忽略会造成比较大的错误,利用状态机比较利于写时序。划分好状态,组合逻辑和时序逻辑,以及中间产生一些控制信号的约束。

    4、

    HPI基本时序
     1 /* HOST-PORT一个操作周期 */
     2 reg [3:0]HPI_state;
     3 reg [1:0]HCNTL_data;
     4 reg frame_end;
     5 reg HCS;
     6 reg HHWIL;
     7 reg HDS1;
     8 reg [1:0]HCNTL;
     9 reg [15:0]HD;
    10 reg HPI_en;
    11 reg verify_bit;
    12 wire [15:0]HD_data_1st;
    13 wire [15:0]HD_data_2nd;
    14 reg [1:0]HCNTL_state;
    15 always @(posedge HPI_clk or negedge reset)
    16 begin
    17     if(~reset)
    18         begin
    19         HCS<=1;
    20         HHWIL<=0;
    21         HDS1<=1;
    22         HPI_state<=0;
    23         HD<=16'b0;
    24         frame_end<=0;//传一个HPIC
    25         //frame_end<=1;//N个HPIC
    26         verify_bit<=0;
    27         end
    28     else if(HPI_en)
    29         case (HPI_state)
    30         0:begin///////////////第一个半字
    31             HCS<=0;
    32             HCNTL<=HCNTL_data;
    33             HHWIL<=0;
    34             HPI_state<=1;
    35             frame_end<=0;
    36             end
    37         1:begin//锁存控制信号
    38             HDS1<=0;
    39             HPI_state<=2;
    40             end
    41         2:begin//准备数据
    42             if(HCNTL_state!=1)//写HPIC时不用检测HRDY
    43                 begin
    44                 HD<=HD_data_1st;
    45                 HPI_state<=3;
    46                 end
    47             else if(HCNTL_state==1)//写地址时,当FIFO不为空时,要产生HRDY,为空时不产生HRDY
    48                 begin
    49                 if(HRDY)
    50                     HPI_state<=2;
    51                 else 
    52                     begin
    53                     HD<=HD_data_1st;
    54                     HPI_state<=3;
    55                     end
    56                 end
    57             // HD<=HD_data_1st;    
    58             // HPI_state<=3;
    59             end
    60         3:begin//锁存数据
    61             HDS1<=1;
    62             HPI_state<=4;
    63             end
    64         4:begin
    65             HCS<=1;    
    66             HPI_state<=5;                    
    67             end
    68         5:begin
    69             HD<=16'b0;
    70             HPI_state<=6;
    71             end
    72         6:begin/////////////第二个半字
    73             HCS<=0;
    74             HHWIL<=1;
    75             HPI_state<=7;            
    76             end
    77         7:begin//锁存控制信号
    78             HDS1<=0;
    79             HPI_state<=8;            
    80             end
    81         8:begin//准备数据
    82             HD<=HD_data_2nd;
    83             HPI_state<=9;
    84             end
    85         9:begin//锁存数据
    86             HDS1<=1;
    87             HPI_state<=10;
    88             end
    89         10:begin
    90             HCS<=1;
    91             HD<=16'b0;
    92             HPI_state<=0;
    93             frame_end<=1;
    94             verify_bit<=~verify_bit;
    95             end
    96         endcase
    97         
    98 end

    5、系统住状态机

    系统主状态
      1 /* 内部信号控制,系统主状态机*/
      2 reg [1:0]work_state;
      3 reg [1:0]HD_data_type;
      4 reg [31:0]HD_data;
      5 reg [4:0]frame_cnt;
      6 reg [3:0]HPID_cnt;
      7 reg [7:0]HPIC_cnt;
      8 reg HPIA_identifyer;
      9 reg HPID_identifyer;
     10 reg HPIC_identifyer;
     11 reg verify_bit2;
     12 
     13 always @(posedge clk or negedge reset)
     14 begin
     15     if(~reset)
     16         begin
     17         work_state<=`idle;
     18         HPI_en<=0;
     19         frame_cnt<=8;
     20         HPIA_identifyer<=0;
     21         HPID_identifyer<=0;
     22         HPIC_identifyer<=0;
     23         HPID_cnt<=0;
     24         HPIC_cnt<=0;
     25         verify_bit2<=0;
     26         end
     27     else
     28         case (work_state)
     29         `idle:
     30                     begin
     31                     if(start)
     32                         begin
     33                         work_state<=`HPIC_send;
     34                         end
     35                     else 
     36                         work_state<=`idle;
     37                     end
     38         `HPIC_send:
     39                     begin
     40                     /* 传一个HPIC */
     41                     if(~frame_end)
     42                         begin
     43                         HPI_en<=1;
     44                         HCNTL_state<=0;
     45                         HD_data_type<=0;
     46                         work_state<=`HPIC_send;
     47                         end
     48                     else if(frame_end)
     49                         begin
     50                         work_state<=`HPIA_send;
     51                         HPI_en<=0;
     52                         verify_bit2<=~verify_bit2;//////HPIC传完verify_bit已经取反了一次,故veriry_bit2取反保证同步
     53                         end
     54                      /* 传N个HPIC */
     55                     // if(frame_end&~HPIC_identifyer)
     56                         // begin
     57                         // HPI_en<=1;
     58                         // HCNTL_state<=0;
     59                         // HD_data_type<=0;
     60                         // HPIC_identifyer<=1;
     61                         // verify_bit2<=~verify_bit2;//为下一帧校验做准备
     62                         // end
     63                     // else if(frame_end&HPIC_identifyer)
     64                         // begin
     65                         // if(verify_bit2^~verify_bit)//一个HD传完
     66                             // begin
     67                             // if(HPIC_cnt==100)
     68                                 // begin
     69                                 // HPI_en<=0;
     70                                 // HPIC_identifyer<=0;//
     71                                 // work_state<=`HPIA_send;
     72                                 // end
     73                             // else
     74                                 // begin
     75                                 // HPI_en<=0;
     76                                 // HPIC_identifyer<=0;
     77                                 // end
     78                             // end
     79                         // end
     80                     // else
     81                         // begin
     82                         // work_state<=`HPIC_send;
     83                         // end
     84                     end
     85         `HPIA_send:
     86                     begin
     87                     if(frame_end&~HPIA_identifyer)
     88                         begin
     89                         if(fre_20hz&&frame_cnt==8)//重新发地址
     90                             begin
     91                             HPIA_identifyer<=1;
     92                             HPI_en<=1;
     93                             HCNTL_state<=1;
     94                             HD_data_type<=1;
     95                             frame_cnt<=0;
     96                             verify_bit2<=~verify_bit2;//////
     97                             end
     98                         else if(fre_20hz&&frame_cnt!=8)//不发地址
     99                             begin
    100                             work_state<=`HPID_send;
    101                             end
    102                         end
    103                     else if(frame_end&HPIA_identifyer)
    104                         begin
    105                         if(verify_bit2^~verify_bit)//进行同或校验,检测一帧是否传完,因为HPI_clk和clk的频率不一样
    106                             begin
    107                             work_state<=`HPID_send;
    108                             HPI_en<=0;
    109                             HPIA_identifyer<=0;
    110                             end
    111                         end
    112                     else
    113                         begin
    114                         work_state<=`HPIA_send;
    115                         end
    116                     end
    117         `HPID_send:
    118                     begin
    119                     if(frame_end&~HPID_identifyer)
    120                         begin
    121                         HPI_en<=1;
    122                         HCNTL_state<=2;
    123                         HD_data_type<=2;
    124                         HPID_identifyer<=1;
    125                         verify_bit2<=~verify_bit2;//为下一帧校验做准备
    126                         end
    127                     else if(frame_end&HPID_identifyer)
    128                         begin
    129                         if(verify_bit2^~verify_bit)//一个HD传完
    130                             begin
    131                             if(HPID_cnt==5)
    132                                 begin
    133                                 HPI_en<=0;
    134                                 HPID_identifyer<=0;//
    135                                 HPID_cnt<=0;
    136                                 frame_cnt<=frame_cnt+1;
    137                                 work_state<=`HPIA_send;
    138                                 end
    139                             else
    140                                 begin
    141                                 HPI_en<=0;
    142                                 HPID_identifyer<=0;
    143                                 HPID_cnt<=HPID_cnt+1;//////////
    144                                 end
    145                             end
    146                         end
    147                     else
    148                         begin
    149                         work_state<=`HPID_send;
    150                         end
    151                     end
    152         endcase
    153                 
    154 end
  • 相关阅读:
    Java学习二十九天
    Java学习二十八天
    47. Permutations II 全排列可重复版本
    46. Permutations 全排列,无重复
    subset ii 子集 有重复元素
    339. Nested List Weight Sum 339.嵌套列表权重总和
    251. Flatten 2D Vector 平铺二维矩阵
    217. Contains Duplicate数组重复元素
    209. Minimum Size Subarray Sum 结果大于等于目标的最小长度数组
    438. Find All Anagrams in a String 查找字符串中的所有Anagrams
  • 原文地址:https://www.cnblogs.com/lanlingshan/p/2440273.html
Copyright © 2011-2022 走看看