微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 使用LX9开发板对兼容ARM9处理器的开源软核进行Dhrystone Benchmark测试(下)

使用LX9开发板对兼容ARM9处理器的开源软核进行Dhrystone Benchmark测试(下)

时间: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中断脉冲。

然后,把兼容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模块的描述。ROM模块存放着程序,它除了供应给处理器内核的指令池外,还包括数据池对ROM模块的访问。另外,在编程态,从串口送入的字节,会依次写入ROM模块中,地址是不断递增的。采用wr_addr作为编程ROM的地址,不断递加。

接下来是RAM模块的例化。RAM模块是在地址ram_addr[31:28]等于4时,可以访问。RAM模块可以进行读写,读写操作由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来区分的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top