• 关于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
  • 相关阅读:
    工具类官网Web原型制作分享-Adobe
    还在为黑白网页设计犯难?12款设计帮你轻松解决!!!
    联系我们吧
    单调栈&&单调队列
    *模板--数据结构
    非递归线段树专题
    反素数
    线段树专题训练
    BST
    排列与组合
  • 原文地址:https://www.cnblogs.com/lanlingshan/p/2440273.html
Copyright © 2020-2023  润新知