<address id="9993j"><address id="9993j"><listing id="9993j"></listing></address></address><form id="9993j"><nobr id="9993j"><meter id="9993j"></meter></nobr></form>

    <output id="9993j"><nobr id="9993j"></nobr></output>

    <noframes id="9993j">
        <address id="9993j"><address id="9993j"></address></address>

          <noframes id="9993j"><address id="9993j"><th id="9993j"></th></address>

          <noframes id="9993j">

            <em id="9993j"><form id="9993j"><nobr id="9993j"></nobr></form></em>

            新聞中心

            EEPW首頁 > 嵌入式系統 > 設計應用 > 使用LX9開發板對兼容ARM9處理器的開源軟核進行Dhrystone Benchmark測試(下)

            使用LX9開發板對兼容ARM9處理器的開源軟核進行Dhrystone Benchmark測試(下)

            作者:free-arm(網名)時間:2013-02-27來源:電子產品世界收藏

              我們把EN_KEY引入設計中,讓它連接入處理器內核的cpu_en輸入端口中。接下來,用一個計數器作為IRQ輸入中斷的觸發源。我們知道進行Dhrystone benchmark測試時,必須有一個實時時鐘來讓程序知道完成dhrystone運算花了多長時間。在Realview MDK提供的dhrystone例程中,里面有句注釋是這樣的:/* Timer Counter 0 Interrupt executes each 10ms @ 40 MHz Crystal Clock */,也就是每10 ms即要發送一次irq中斷脈沖。

            本文引用地址:http://www.snowlakeshores.com/article/142464.htm

              然后,把兼容ARM9處理器內核例化到程序中。
              reg [14:0] wr_addr;
              always @ (posedge clk or posedge rst )
              if ( rst )
              wr_addr <= 14'b0;
              else if (cpu_en)
              wr_addr <= 14'b0;
              else if (rx_vld)
              wr_addr <= wr_addr + 1'b1;
              else;
              rom u_rom (
              .clka ( clk ),
              .ena ( cpu_en ? rom_en : rx_vld ),
              .wea ( cpu_en ? 4'b0 : (1'b1<
              .addra ( cpu_en ? rom_addr[14:2] : wr_addr[14:2] ),
              .dina ( {4{rx_data[7:0]}} ),
              .douta ( rom_data ),
              .clkb ( clk ),
              .enb ( ram_cen & ~ram_wen & (ram_addr[31:28]==4'h0 ) ),
              .web ( 4'b0 ),
              .addrb ( ram_addr[14:2] ),
              .dinb ( 32'h0 ),
              .doutb ( ram_rdata_rom )

              后續的程序是對模塊的描述。模塊存放著程序,它除了供應給處理器內核的指令池外,還包括數據池對模塊的訪問。另外,在編程態,從串口送入的字節,會依次寫入ROM模塊中,地址是不斷遞增的。采用wr_addr作為編程ROM的地址,不斷遞加。

              接下來是模塊的例化。模塊是在地址ram_addr[31:28]等于4時,可以訪問。模塊可以進行讀寫,讀寫操作由ram_wen控制。Wea可以控制RAM模塊的字節使能。

              ram u_ram (
              .clka ( clk ),
              .ena ( ram_cen&(ram_addr[31:28]==4'h4) ),
              .wea ( ram_wen ? ram_flag : 4'b0 ), // Bus [3 : 0]
              .addra ( ram_addr[13:2] ), // Bus [11 : 0]
              .dina ( ram_wdata ), // Bus [31 : 0]
              .douta ( ram_rdata_ram )
              ); // Bus [31 : 0]

              然后是例化了一個串口模塊。這個模塊是筆者寫一個串并轉換發送字節的模塊。只需要把tx_vld/tx_data[7:0]寫入相應的字節,那么它就會把tx_data[7:0]串行通過UART_TX發送出去。同理,如果收到字節,則會啟動rx_vld/rx_data[7:0],表示收到一個字節。rx_vld和tx_vld都是高電平使能信號。在rx_vld等于1時,表示收到的有效字節位于rx_data中。

              rxtx u_uart (
              .clk ( clk ),
              .rst ( rst ),
              .rx ( UART_RX ),
              .tx_vld ( tx_vld ),
              .tx_data ( tx_data ),
              .rx_vld ( rx_vld ),
              .rx_data ( rx_data ),
              .tx ( UART_TX ),
              .txrdy ( txrdy )

              然后是讀選擇信號。由于會對ROM、RAM、串口這三個不同模塊進行讀寫,rd_sel可以區分此次讀操作該選擇哪一個數據。這當然是通過ram_addr來區分的。



            關鍵詞: ROM RAM

            評論


            相關推薦

            技術專區

            關閉
            五月天国产成人AV免费观看
            <address id="9993j"><address id="9993j"><listing id="9993j"></listing></address></address><form id="9993j"><nobr id="9993j"><meter id="9993j"></meter></nobr></form>

              <output id="9993j"><nobr id="9993j"></nobr></output>

              <noframes id="9993j">
                  <address id="9993j"><address id="9993j"></address></address>

                    <noframes id="9993j"><address id="9993j"><th id="9993j"></th></address>

                    <noframes id="9993j">

                      <em id="9993j"><form id="9993j"><nobr id="9993j"></nobr></form></em>