【常用電路】線性反饋移位寄存器(LFSR)


讀華為技術文檔《FIFO經驗談》看到的這個電路:

  FIFO的讀寫地址產生比較簡單,當讀使能有效時,在時鍾作用下,讀地址加1;當寫使能有效時,寫地址加1。

  當FIFO深度較大時,同時FIFO的速度要求較高時,可以采用線性反饋移位計數器 (LFSR)。它的速度非常快,但是要犧牲一個地址。

  針對同步的大FIFO,它們的讀寫地址完全可以使用線性反饋移位寄存器 LFSR 產生,而不 是簡單的加1操作,極大的提高了速度,如果對FIFO的利用率沒有很高要求的時候,推薦使用該方法。使用LFSR的優點是在XILINX的FPGA中布線,可以使用LUT直接完成。

 1 /************************************************************\
 2 * *
 3 * Generation of Read and Write address pointers. They use *
 4 * LFSR counters, which are very fast. Because of the *
 5 * nature of LFSR, one address is sacrificed. *
 6 * *
 7 \************************************************************/
 8 wire read_linearfeedback, write_linearfeedback;
 9 
10 assign read_linearfeedback = ! (read_addr[8] ^ read_addr[4]);
11 assign write_linearfeedback = ! (write_addr[8] ^ write_addr[4]);
12 
13 always @(posedge clock or posedge fifo_gsr)
14     if (fifo_gsr)     read_addr <= 9'h0;
15     else if (read_allow)
16         read_addr <= { read_addr[7], read_addr[6], read_addr[5],
17                             read_addr[4], read_addr[3], read_addr[2],
18                             read_addr[1], read_addr[0], read_linearfeedback };
19 
20 always @(posedge clock or posedge fifo_gsr)
21     if (fifo_gsr)     write_addr <= 9'h0
22     else if (write_allow)
23         write_addr <= { write_addr[7], write_addr[6], write_addr[5],
24                             write_addr[4], write_addr[3], write_addr[2],
25                             write_addr[1], write_addr[0], write_linearfeedback };                

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM