1. 删除微码Block_Transform,tx/rx统一使用BlockTransform 2.新增ARM相关地址规划,新增pcie2recv的ddr空间,用于rk3588解算完成后告知APE4更新变换参数 3.修改Transform函数的接口,现在通过查表得到角度R/I值 4.新增Recv开始处理接口,通过devmem 0x82000000 0xa5a55a5a 32启动 5.PCIE task新增init函数,便于使用transform_para_func相关函数
This commit is contained in:
parent
7fa11fe558
commit
cd5c347a46
@ -1,6 +1,6 @@
|
||||
############################
|
||||
# mpu libs need to link to this APE, could be specified by user
|
||||
MICRO_CODE_LIBS:=Block_Transform Channel_Est Channel_Equ Fre_est Fre_comp
|
||||
MICRO_CODE_LIBS:=BlockTransform Channel_Est Channel_Equ Fre_est Fre_comp
|
||||
############################
|
||||
# tool path, could be specified by user
|
||||
#UCP_HOME=/opt/sdk/ucp2.0_sdk/bin
|
||||
|
@ -1,6 +1,6 @@
|
||||
############################
|
||||
# mpu libs need to link to this APE, could be specified by user
|
||||
MICRO_CODE_LIBS:=Block_Transform Channel_Est Channel_Equ Fre_est Fre_comp
|
||||
MICRO_CODE_LIBS:=BlockTransform Channel_Est Channel_Equ Fre_est Fre_comp
|
||||
############################
|
||||
# tool path, could be specified by user
|
||||
#UCP_HOME=/opt/sdk/ucp2.0_sdk/bin
|
||||
|
14
APE6/TestTask/inc/Frame_test.h
Normal file
14
APE6/TestTask/inc/Frame_test.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef FRAME_TEST_H
|
||||
#define FRAME_TEST_H
|
||||
|
||||
|
||||
#include "ape_common.h"
|
||||
#include "task_define.h"
|
||||
#include "log_interface.h"
|
||||
#include "msg_interface.h"
|
||||
#include "msg_transfer_layer.h"
|
||||
#include "drv_ape.h"
|
||||
#include "trace.h"
|
||||
|
||||
void Test_Task();
|
||||
#endif
|
77
APE6/TestTask/src/Frame_test.s.c
Normal file
77
APE6/TestTask/src/Frame_test.s.c
Normal file
@ -0,0 +1,77 @@
|
||||
#include "Frame_test.h"
|
||||
|
||||
void Test_Task()
|
||||
{
|
||||
|
||||
uint16_t start_slot = TIME_SLOT();
|
||||
g_time_start[0] = TIME_NS();
|
||||
RUN_CNT(TRACE_TESTTASK_ADDR, 0);
|
||||
|
||||
uint32_t cur_sfn = get_rx_nr_sfn();
|
||||
uint32_t cur_slot = get_rx_nr_slot();
|
||||
int32_t *transmitter_malloc_dm0_ptr;
|
||||
|
||||
LOG_ERROR_S("cur_sfn:%d, cur_slot:%d\n", cur_sfn, cur_slot);
|
||||
|
||||
TRACE(TRACE_TESTTASK_ADDR, 3, 1);
|
||||
|
||||
|
||||
//0 空间回收
|
||||
dmalloc_trim(0, APE_DM0);
|
||||
dmalloc_trim(0, APE_DM1);
|
||||
dmalloc_trim(0, APE_DM2);
|
||||
dmalloc_trim(0, APE_DM3);
|
||||
|
||||
//1. DM0空间申请
|
||||
transmitter_malloc_dm0_ptr = dmemalign_unit(0x4000, 131072, APE_DM0); //申请了128KiB 首地址16k对齐
|
||||
if (NULLPTR == transmitter_malloc_dm0_ptr)
|
||||
{
|
||||
//LOG_ERROR_S("alloc DM0 err\n", cur_sfn, cur_slot);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int32_t *output_data_ptr;// 最终输出数据地址(dm)
|
||||
|
||||
output_data_ptr = transmitter_malloc_dm0_ptr;
|
||||
|
||||
TRACE(TRACE_TESTTASK_ADDR, 3, 2);
|
||||
uint32_t idx = 0;
|
||||
for(idx =0; idx < 100; idx++)
|
||||
{
|
||||
*(output_data_ptr + idx) = cur_sfn * 100000 + cur_slot * 100 + idx;
|
||||
}
|
||||
|
||||
uint32_t output_data_ptr_ddr_even = (uint32_t)JESD_NRFDD_RX_SLOT_ODD_DATA_ADDR;// 最终输出数据地址(ddr)
|
||||
uint32_t output_data_ptr_ddr_odd = (uint32_t)JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR ;// 最终输出数据地址(ddr)
|
||||
// ape_csu_dma_1D_L2G_ch0ch1_transfer((uint64_t)DM_TO_CSU_ADDR((uint32_t)output_data_ptr),
|
||||
// output_data_ptr_ddr_even,
|
||||
// temp_len_32,
|
||||
// DMA_TAG_L2G,
|
||||
// 1);
|
||||
|
||||
//LOG_ERROR_S("ddr_even:%08x, ddr_odd:%08x\n", output_data_ptr_ddr_even, output_data_ptr_ddr_odd);
|
||||
TRACE(TRACE_TESTTASK_ADDR, 3, 3);
|
||||
|
||||
uint32_t temp_len_32 = 7168;
|
||||
|
||||
if(cur_slot % 2 == 1){
|
||||
ape_csu_dma_1D_L2G_ch0ch1_transfer((uint64_t)DM_TO_CSU_ADDR(output_data_ptr),
|
||||
output_data_ptr_ddr_even,
|
||||
temp_len_32,
|
||||
DMA_TAG_L2G,
|
||||
1);
|
||||
}else{
|
||||
ape_csu_dma_1D_L2G_ch0ch1_transfer((uint64_t)DM_TO_CSU_ADDR(output_data_ptr),
|
||||
output_data_ptr_ddr_odd,
|
||||
temp_len_32,
|
||||
DMA_TAG_L2G,
|
||||
1);
|
||||
}
|
||||
|
||||
dfree_unit(transmitter_malloc_dm0_ptr, APE_DM0);
|
||||
|
||||
TRACE(TRACE_TESTTASK_ADDR, 3, 4);
|
||||
RUN_CNT(TRACE_TESTTASK_ADDR, 1);
|
||||
TRACE_MAX(TRACE_TESTTASK_ADDR, 2, Time_offset(0) );
|
||||
}
|
@ -14,6 +14,7 @@
|
||||
#ifndef __PCIE_TESTCASE_H__
|
||||
#define __PCIE_TESTCASE_H__
|
||||
#include "interface_rec_sync2_pcie.h"
|
||||
#include "interface_pcie2_rec_sync.h"
|
||||
uint32_t pcie_rx_callback_data(const char* buf,uint32_t payloadSize);
|
||||
uint32_t pcie_rx_callback_ctrl(const char* buf,uint32_t payloadSize);
|
||||
uint32_t pcie_rx_callback_oam(const char* buf,uint32_t payloadSize);
|
||||
@ -22,6 +23,7 @@ void test_case_sendmsg_pcie();
|
||||
void test_case_recv_msg_pcie();
|
||||
void test_speed_sendmsg_pcie();
|
||||
void test_speed_recv_msg_pcie();
|
||||
void pcie_test_task_init();
|
||||
void pcie_test_task_func(receiver_sync2pcie_t* msg_ptr, uint32_t msg_len);
|
||||
|
||||
#endif
|
||||
|
@ -57,7 +57,7 @@ void Phy_Task_Ape7_Reg()
|
||||
osp_task_info_ex mgr_task =
|
||||
{PHY_TASK_RECEIVER_FIRST_SYNC, "Receiver_Sync_First_Sync", PHY_TASK_PRI_RECEIVER_FIRST_SYNC, 4096, OSP_EVENT_TYPE, 0x000, 0x000, 0, (OSP_TASKINIT_FUNC)Receiver_Sync_First_Init, (OSP_TASKENTRY_FUNC)Receiver_First_Sync_Proc};
|
||||
osp_task_info_ex pcie_normal_task_info =
|
||||
{PHY_TASK_PCIE, (int8_t*)"pcie_normal_task", PHY_TASK_PRI_PCIE, 4096, OSP_EVENT_TYPE, 0x000, 0, 0, NULL, (OSP_TASKENTRY_FUNC)pcie_test_task_func};
|
||||
{PHY_TASK_PCIE, (int8_t*)"pcie_normal_task", PHY_TASK_PRI_PCIE, 4096, OSP_EVENT_TYPE, 0x000, 0, 0, (OSP_TASKINIT_FUNC)pcie_test_task_init, (OSP_TASKENTRY_FUNC)pcie_test_task_func};
|
||||
// osp_task_create(&ape7_event_task_info);
|
||||
// osp_task_create(&ape7_event_task_info_del);
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "Fucp_Ape7_pcie_testcase.h"
|
||||
#include "mem_def.h"
|
||||
#include "interface_rec_sync2_rec_sync_first.h"
|
||||
#include "transform_para_func.h"
|
||||
|
||||
|
||||
|
||||
@ -476,6 +477,14 @@ void test_speed_recv_msg_pcie()
|
||||
}
|
||||
|
||||
|
||||
void pcie_test_task_init()
|
||||
{
|
||||
transform_para_init(0, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void pcie_test_task_func(receiver_sync2pcie_t* msg_ptr, uint32_t msg_len)
|
||||
{
|
||||
//获取状态机状态
|
||||
@ -487,7 +496,7 @@ void pcie_test_task_func(receiver_sync2pcie_t* msg_ptr, uint32_t msg_len)
|
||||
SYNC_AI_PROCECING,
|
||||
SYNC_TRACKING
|
||||
}receiver_sync_status_e;*/
|
||||
if(2 != LOAD_EX_W(status_SM_addr->sync_status))
|
||||
if(2 != LOAD_EX_W(&(status_SM_addr->sync_status)))
|
||||
return ;
|
||||
//提供的数据地址(DDR)和本次数据的SFN SLOT号
|
||||
uint32_t sfn = msg_ptr->sfn;
|
||||
@ -520,9 +529,23 @@ void pcie_test_task_func(receiver_sync2pcie_t* msg_ptr, uint32_t msg_len)
|
||||
|
||||
//TODO:接收到RK3588的数据后,必须更新状态机后级模块才能工作
|
||||
//WARNING:需要使用这个代码
|
||||
#if 0
|
||||
#if 1
|
||||
uint32_t ref_sfn = 0, ref_slot = 0;//PCIE解算存下来的时序值
|
||||
uint32_t bit9 = 0, bit11 = 0, bit13 = 0;
|
||||
transform_decode_para(bit9, bit11, bit13);
|
||||
//置为1以后,APE4改变状态时会重置状态值,
|
||||
receiver_pcie2sync_t* pcie2sync = (receiver_pcie2sync_t*)TRANSFORM_REF_PARA_PCIE2SYNC_ADDR;//存储在DDR
|
||||
STORE_EX_W(&(pcie2sync->ref_sfn) , ref_sfn);
|
||||
STORE_EX_W(&(pcie2sync->ref_slot) , ref_slot);
|
||||
STORE_EX_W(&(pcie2sync->thita1_val) , g_thita1_val);
|
||||
STORE_EX_W(&(pcie2sync->thita2_val) , g_thita2_val);
|
||||
STORE_EX_W(&(pcie2sync->thita34_val) , g_thita34_val);
|
||||
STORE_EX_W(&(pcie2sync->status) , 1); // 0: not ready 1: wait APE4 read 2:APE4 read & done
|
||||
|
||||
STORE_EX_W(status_SM_addr->sync_status , 3);
|
||||
__ucps2_synch(0);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
return;
|
||||
|
@ -5,6 +5,6 @@
|
||||
#include <Transform.h>
|
||||
#include "stdio.h"
|
||||
|
||||
void TransformImpl(v16u32 * SVRReg,int *ConfigAddr, int InAddr, int OutAddr, int N, double* thita, int direct);
|
||||
void TransformImpl(v16u32 * SVRReg,int *ConfigAddr, int InAddr, int OutAddr, int N, double* db_real, double* db_imag, int direct);
|
||||
|
||||
#endif //DEBUG_MC
|
||||
|
@ -6,8 +6,7 @@
|
||||
|
||||
|
||||
|
||||
void TransformImpl(v16u32 * SVRReg,int *ConfigAddr, int InAddr, int OutAddr, int N, double* thita, int direct){
|
||||
|
||||
void TransformImpl(v16u32 * SVRReg,int *ConfigAddr, int InAddr, int OutAddr, int N, double* db_real, double* db_imag, int direct){
|
||||
|
||||
SVRReg[0] = (v16u32){0, 0, 0, 0,
|
||||
0x40, 0, 0, 0,
|
||||
@ -15,7 +14,7 @@ void TransformImpl(v16u32 * SVRReg,int *ConfigAddr, int InAddr, int OutAddr, int
|
||||
0xffff, 0x6, 0, 0};
|
||||
|
||||
volatile int a;
|
||||
Transform((int)ConfigAddr,MPU_ADDR(InAddr),MPU_ADDR(OutAddr), N, thita, direct);
|
||||
Transform((int)ConfigAddr,MPU_ADDR(InAddr),MPU_ADDR(OutAddr), N, db_real, db_imag, direct);
|
||||
SVRReg[0][0] = MPU_ADDR(ConfigAddr);
|
||||
if(N==2){
|
||||
Transform2Asm(*SVRReg);
|
||||
|
@ -9,7 +9,7 @@ void Transform_Proc(
|
||||
int32_t *temp_dm3_ptr
|
||||
)
|
||||
{
|
||||
|
||||
receiver_sync2symb_t *proc_info = param_ptr;
|
||||
//局部变量定义
|
||||
uint32_t equ_data_ddr_ptr = CHANNELEQU_DATA_DDR_PTR; // COMPENSATED_DATA_DDR_PTR; // EQU_DATA_DDR_PTR;
|
||||
// uint32_t res_ptr = CHANNELEQU_DATA_DDR_PTR;
|
||||
@ -28,19 +28,23 @@ void Transform_Proc(
|
||||
volatile int a;
|
||||
/*****************************************initial*****************************************/
|
||||
double thita[6];
|
||||
int current_state[9 + 11 + 13];
|
||||
for (int ii = 0; ii < 9 + 11 + 13; ii++){
|
||||
int tmp = rand();
|
||||
if(tmp>RAND_MAX/2)
|
||||
current_state[ii] = 1;
|
||||
else
|
||||
current_state[ii] = 0;
|
||||
}
|
||||
double *db_imag = proc_info->transform_para_real;
|
||||
double *db_real = proc_info->transform_para_imag;
|
||||
|
||||
get_thita(current_state,thita);
|
||||
double* thita1, * thita2, * thita3;
|
||||
thita1 = thita2 = thita;
|
||||
thita3 = thita + 2;
|
||||
// int current_state[9 + 11 + 13];
|
||||
// for (int ii = 0; ii < 9 + 11 + 13; ii++){
|
||||
// int tmp = rand();
|
||||
// if(tmp>RAND_MAX/2)
|
||||
// current_state[ii] = 1;
|
||||
// else
|
||||
// current_state[ii] = 0;
|
||||
// }
|
||||
|
||||
|
||||
// get_thita(current_state,thita);
|
||||
// double* thita1, * thita2, * thita3;
|
||||
// thita1 = thita2 = thita;
|
||||
// thita3 = thita;
|
||||
|
||||
for(int iBlk = 0;iBlk < 7;iBlk++){
|
||||
ape_csu_dma_1D_G2L_ch2ch3_transfer(
|
||||
@ -51,7 +55,7 @@ void Transform_Proc(
|
||||
1 //uint8_t isWait
|
||||
);
|
||||
ape_csu_task_lookup(DMA_TAG_G2L, 1);
|
||||
TransformImpl(SVRReg, Cfg_DeTransform4,TransTemp,OutputAddr_Trans, 4, thita3, -1);
|
||||
TransformImpl(SVRReg, Cfg_DeTransform4,TransTemp,OutputAddr_Trans, 4, db_real, db_imag, -1);
|
||||
|
||||
ape_csu_dma_1D_L2G_ch0ch1_transfer((uint64_t)DM_TO_CSU_ADDR((uint32_t)OutputAddr_Trans),
|
||||
(uint64_t)symbol_SM_addr_in + 4096*4*2*iBlk,
|
||||
@ -73,7 +77,7 @@ void Transform_Proc(
|
||||
DMA_TAG_G2L, //tag
|
||||
1);
|
||||
ape_csu_task_lookup(DMA_TAG_G2L, 1);
|
||||
TransformImpl(SVRReg, Cfg_DeTransform2,InputAddr_Trans,TransTemp, 2, thita2, -1);
|
||||
TransformImpl(SVRReg, Cfg_DeTransform2,InputAddr_Trans,TransTemp, 2, db_real, db_imag, -1);
|
||||
|
||||
for(int i = 0; i<14;i++){
|
||||
ape_csu_dma_1D_L2G_ch0ch1_transfer(
|
||||
|
@ -25,6 +25,8 @@
|
||||
#include "interface_rec_sync2_rec_sync_first.h"
|
||||
#include "interface_rec_sync2_pcie.h"
|
||||
#include "receiver_sync_vars.h"
|
||||
#include "transform_para_func.h"
|
||||
#include "interface_pcie2_rec_sync.h"
|
||||
|
||||
//include mpu header files
|
||||
#include "ByteCopy.h"
|
||||
|
@ -185,6 +185,11 @@ void Receiver_Sync_Proc(
|
||||
}
|
||||
else if(SYNC_IDLE == sync_status)
|
||||
{
|
||||
//只有指定地址标志位置位,才开始recv的处理
|
||||
volatile uint32_t recv_start_first_sync_flag = LOAD_EX_W((uint32_t)RECV_FIRST_SYNC_START_FLAG);
|
||||
if(0xa5a55a5a != recv_start_first_sync_flag)
|
||||
return ;
|
||||
|
||||
TRACE(TRACE_RECEIVER_SYNC_ADDR, 3, 3);
|
||||
STORE_EX_W(&g_receiver_sync_status_SM_ptr->sync_status ,SYNC_FIRST_RUNING);
|
||||
__ucps2_synch(0);
|
||||
@ -213,6 +218,22 @@ void Receiver_Sync_Proc(
|
||||
else if((SYNC_TRACKING == sync_status) || (SYNC_AI_PROCECING == sync_status))
|
||||
{
|
||||
TRACE(TRACE_RECEIVER_SYNC_ADDR, 3, 5);
|
||||
receiver_pcie2sync_t* pcie2sync = (receiver_pcie2sync_t*)TRANSFORM_REF_PARA_PCIE2SYNC_ADDR;//存储在DDR
|
||||
volatile uint32_t transform_para_status = LOAD_EX_W(&(pcie2sync->status));
|
||||
if(1 == transform_para_status)
|
||||
{
|
||||
g_thita1_val = LOAD_EX_W(&(pcie2sync->thita1_val));
|
||||
g_thita2_val = LOAD_EX_W(&(pcie2sync->thita2_val));
|
||||
g_thita34_val = LOAD_EX_W(&(pcie2sync->thita34_val));
|
||||
uint32_t ref_sfn = LOAD_EX_W(&(pcie2sync->ref_sfn));
|
||||
uint32_t ref_slot = LOAD_EX_W(&(pcie2sync->ref_sfn));
|
||||
//根据时序递推参数
|
||||
transform_update_cur_para(cur_sfn, cur_slot, ref_sfn, ref_slot);
|
||||
//同步transform参数后,置位状态位2,表示APE4完成了本次同步,等待下一次被置1
|
||||
STORE_EX_W(&(pcie2sync->status) , 2); // 0: not ready 1: wait APE4 read 2:APE4 read & done
|
||||
__ucps2_synch(0);
|
||||
}
|
||||
|
||||
Receiver_Fine_Sync_Proc(cur_sfn, cur_slot, sync_status);
|
||||
|
||||
//根据当前状态机状态,buffer存储的数据长度,sync同步帧头,发送核间消息触发任务
|
||||
@ -427,6 +448,14 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot, uint32_t proc_type)
|
||||
data_send2symb_task[task_idx].data_section0_length = (offset_temp > (61440 * RECEIVER_SYNC_SYNC2SYMB_NUM_BUFFER)) ? ((61440 * RECEIVER_SYNC_SYNC2SYMB_NUM_BUFFER) - (offset_temp - 61440)) : 61440;
|
||||
data_send2symb_task[task_idx].data_section1_ptr = (2 == data_send2symb_task[task_idx].num_data_section) ? (sync2symb_data_buffer[0]) : 0;
|
||||
data_send2symb_task[task_idx].data_section1_length = (2 == data_send2symb_task[task_idx].num_data_section) ? (61440 - data_send2symb_task[task_idx].data_section0_length) : 0;
|
||||
data_send2symb_task[task_idx].transform_para_real[0] = transform_get_thita1_real();
|
||||
data_send2symb_task[task_idx].transform_para_real[1] = transform_get_thita2_real();
|
||||
data_send2symb_task[task_idx].transform_para_real[2] = transform_get_thita3_real();
|
||||
data_send2symb_task[task_idx].transform_para_real[3] = transform_get_thita4_real();
|
||||
data_send2symb_task[task_idx].transform_para_imag[0] = transform_get_thita1_imag();
|
||||
data_send2symb_task[task_idx].transform_para_imag[1] = transform_get_thita2_imag();
|
||||
data_send2symb_task[task_idx].transform_para_imag[2] = transform_get_thita3_imag();
|
||||
data_send2symb_task[task_idx].transform_para_imag[3] = transform_get_thita4_imag();
|
||||
|
||||
//维护状态信息
|
||||
cylic_buffer_data_len = cylic_buffer_data_offset_temp - offset_temp;
|
||||
@ -455,6 +484,8 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot, uint32_t proc_type)
|
||||
symb_proc_core_sel,
|
||||
PHY_TASK_RECEIVER_SYNC,
|
||||
PHY_TASK_RECEIVER_SYMB);
|
||||
//递推1次
|
||||
transform_para_update(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -503,6 +534,8 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot, uint32_t proc_type)
|
||||
STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_len, 0);
|
||||
}
|
||||
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 7);
|
||||
|
||||
|
||||
ape_csu_task_lookup(DMA_TAG_G2G, 1);
|
||||
Receiver_Sync_Memory_Free();
|
||||
|
||||
|
@ -1,64 +1,79 @@
|
||||
#ifndef _TRANSFORM_PARA_FUNC_H
|
||||
#define _TRANSFORM_PARA_FUNC_H
|
||||
|
||||
|
||||
#include "typedef.h"
|
||||
#include "log_interface.h"
|
||||
#include "phy_macro.h"
|
||||
#define THITA1_LEN (511)
|
||||
#define THITA2_LEN (2047)
|
||||
#define THITA34_LEN (8191)
|
||||
|
||||
|
||||
extern volatile uint32_t g_thita1_val;
|
||||
extern volatile uint32_t g_thita2_val;
|
||||
extern volatile uint32_t g_thita34_val;
|
||||
extern uint32_t g_thita1_addr;
|
||||
extern uint32_t g_thita2_addr;
|
||||
extern uint32_t g_thita3_addr;
|
||||
extern uint32_t g_thita4_addr;
|
||||
|
||||
|
||||
#define transform_get_thita1_2bit() (LOAD_EX_W(g_thita1_addr + (g_thita1_val<<2)))
|
||||
#define transform_get_thita2_2bit() (LOAD_EX_W(g_thita2_addr + (g_thita2_val<<2)))
|
||||
#define transform_get_thita3_2bit() (LOAD_EX_W(g_thita3_addr + (g_thita34_val<<2)))
|
||||
#define transform_get_thita4_2bit() (LOAD_EX_W(g_thita4_addr + (g_thita34_val<<2)))
|
||||
//获得当前8bit随机数值
|
||||
#define get_transform_8bit() (uint8_t)(transform_get_thita1_2bit() || (transform_get_thita2_2bit() << 2) || \
|
||||
(transform_get_thita3_2bit()<<4) || (transform_get_thita4_2bit() << 8))
|
||||
|
||||
/*初始化transform_para操作相关的变量,发送和接收使用同一个全局标量 note:发送和接受任务不能部署在同一个核上,否则维护的变量会冲突
|
||||
*设置存储寄存器序号
|
||||
*param: thita1_init:查表的序号,范围0~510
|
||||
*param: thita2_init:查表的序号,范围0~2047
|
||||
*param: thita34_init:查表的序号,范围0~8191
|
||||
*/
|
||||
int transform_para_init(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init);
|
||||
|
||||
/*设置存储寄存器序号
|
||||
*param: thita1_init:查表的序号,范围0~510
|
||||
*param: thita2_init:查表的序号,范围0~2047
|
||||
*param: thita34_init:查表的序号,范围0~8191
|
||||
*/
|
||||
int transform_set_para(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init);
|
||||
|
||||
//向后递推n次
|
||||
int transform_para_update(uint32_t n);
|
||||
|
||||
/*根据pcie返回的结果计算当前状态,并更新寄存器参数
|
||||
*param: thita1_para:pcie提供的9bit
|
||||
*param: thita2_para:pcie提供的11bit
|
||||
*param: thita3_para:pcie提供的13bit
|
||||
*/
|
||||
int transform_decode_para(uint32_t thita1_para, uint32_t thita2_para, uint32_t thita34_para);
|
||||
|
||||
|
||||
/*根据时序偏差更新寄存器参数
|
||||
*param: cur_sfn:当前sfn号
|
||||
*param: cur_slot:当前slot号
|
||||
*param: ref_sfn:rk3588解算输入使用的sfn号
|
||||
*param: ref_slot:rk3588解算输入使用的slot号
|
||||
*/
|
||||
int transform_update_cur_para(uint32_t cur_sfn, uint32_t cur_slot, uint32_t ref_sfn, uint32_t ref_slot)
|
||||
|
||||
#ifndef _TRANSFORM_PARA_FUNC_H
|
||||
#define _TRANSFORM_PARA_FUNC_H
|
||||
|
||||
|
||||
#include "type_define.h"
|
||||
#include "log_interface.h"
|
||||
#include "phy_macro.h"
|
||||
#define THITA1_LEN (511)
|
||||
#define THITA2_LEN (2047)
|
||||
#define THITA34_LEN (8191)
|
||||
|
||||
|
||||
extern volatile uint32_t g_thita1_val;
|
||||
extern volatile uint32_t g_thita2_val;
|
||||
extern volatile uint32_t g_thita34_val;
|
||||
extern uint32_t g_thita1_addr;
|
||||
extern uint32_t g_thita2_addr;
|
||||
extern uint32_t g_thita3_addr;
|
||||
extern uint32_t g_thita4_addr;
|
||||
extern double thita2real[4][4];
|
||||
extern double thita2imag[4][4];
|
||||
|
||||
|
||||
|
||||
|
||||
#define transform_get_thita1_2bit() (LOAD_EX_W(g_thita1_addr + (g_thita1_val<<2)))
|
||||
#define transform_get_thita2_2bit() (LOAD_EX_W(g_thita2_addr + (g_thita2_val<<2)))
|
||||
#define transform_get_thita3_2bit() (LOAD_EX_W(g_thita3_addr + (g_thita34_val<<2)))
|
||||
#define transform_get_thita4_2bit() (LOAD_EX_W(g_thita4_addr + (g_thita34_val<<2)))
|
||||
|
||||
#define transform_get_thita1_real() (thita2real[0][LOAD_EX_W(g_thita1_addr + (g_thita1_val<<2))])
|
||||
#define transform_get_thita2_real() (thita2real[1][LOAD_EX_W(g_thita2_addr + (g_thita2_val<<2))])
|
||||
#define transform_get_thita3_real() (thita2real[2][LOAD_EX_W(g_thita3_addr + (g_thita34_val<<2))])
|
||||
#define transform_get_thita4_real() (thita2real[3][LOAD_EX_W(g_thita4_addr + (g_thita34_val<<2))])
|
||||
|
||||
#define transform_get_thita1_imag() (thita2imag[0][LOAD_EX_W(g_thita1_addr + (g_thita1_val<<2))])
|
||||
#define transform_get_thita2_imag() (thita2imag[1][LOAD_EX_W(g_thita2_addr + (g_thita2_val<<2))])
|
||||
#define transform_get_thita3_imag() (thita2imag[2][LOAD_EX_W(g_thita3_addr + (g_thita34_val<<2))])
|
||||
#define transform_get_thita4_imag() (thita2imag[3][LOAD_EX_W(g_thita4_addr + (g_thita34_val<<2))])
|
||||
|
||||
//获得当前8bit随机数值
|
||||
#define get_transform_8bit() (uint8_t)(transform_get_thita1_2bit() || (transform_get_thita2_2bit() << 2) || \
|
||||
(transform_get_thita3_2bit()<<4) || (transform_get_thita4_2bit() << 8))
|
||||
|
||||
/*初始化transform_para操作相关的变量,发送和接收使用同一个全局标量 note:发送和接受任务不能部署在同一个核上,否则维护的变量会冲突
|
||||
*设置存储寄存器序号
|
||||
*param: thita1_init:查表的序号,范围0~510
|
||||
*param: thita2_init:查表的序号,范围0~2047
|
||||
*param: thita34_init:查表的序号,范围0~8191
|
||||
*/
|
||||
int transform_para_init(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init);
|
||||
|
||||
/*设置存储寄存器序号
|
||||
*param: thita1_init:查表的序号,范围0~510
|
||||
*param: thita2_init:查表的序号,范围0~2047
|
||||
*param: thita34_init:查表的序号,范围0~8191
|
||||
*/
|
||||
int transform_set_para(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init);
|
||||
|
||||
//向后递推n次
|
||||
int transform_para_update(uint32_t n);
|
||||
|
||||
/*根据pcie返回的结果计算当前状态,并更新寄存器参数
|
||||
*param: thita1_para:pcie提供的9bit
|
||||
*param: thita2_para:pcie提供的11bit
|
||||
*param: thita3_para:pcie提供的13bit
|
||||
*/
|
||||
int transform_decode_para(uint32_t thita1_para, uint32_t thita2_para, uint32_t thita34_para);
|
||||
|
||||
|
||||
/*根据时序偏差更新寄存器参数
|
||||
*param: cur_sfn:当前sfn号
|
||||
*param: cur_slot:当前slot号
|
||||
*param: ref_sfn:rk3588解算输入使用的sfn号
|
||||
*param: ref_slot:rk3588解算输入使用的slot号
|
||||
*/
|
||||
int transform_update_cur_para(uint32_t cur_sfn, uint32_t cur_slot, uint32_t ref_sfn, uint32_t ref_slot);
|
||||
|
||||
#endif /*_TRANSFORM_PARA_FUNC_H*/
|
@ -1,162 +1,174 @@
|
||||
#include "transform_para_func.h"
|
||||
|
||||
volatile uint32_t g_thita1_val;
|
||||
volatile uint32_t g_thita2_val;
|
||||
volatile uint32_t g_thita34_val;
|
||||
|
||||
//查bit具体值使用的表
|
||||
uint32_t g_thita1_addr;
|
||||
uint32_t g_thita2_addr;
|
||||
uint32_t g_thita3_addr;
|
||||
uint32_t g_thita4_addr;
|
||||
//查解算表2偏移量使用的表
|
||||
uint32_t g_no1_addr;
|
||||
uint32_t g_no2_addr;
|
||||
uint32_t g_no3_addr;
|
||||
//查解算得到的序号值使用的表
|
||||
uint32_t g_nxtstate9_addr;
|
||||
uint32_t g_nxtstate11_addr;
|
||||
uint32_t g_nxtstate13_addr;
|
||||
uint32_t g_thita_len;//not use
|
||||
|
||||
int transform_para_init(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init)
|
||||
{
|
||||
//配置初始值
|
||||
transform_set_para(thita1_init, thita2_init, thita34_init);
|
||||
|
||||
//载入查表文件到ddr,获取数据首地址存为全局变量
|
||||
uint32_t ret = -1;
|
||||
ret = osp_get_cfgfile("thita1.dat",
|
||||
(uint32_t *)&(g_thita1_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita1.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("thita2.dat",
|
||||
(uint32_t *)&(g_thita2_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita2.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("thita3.dat",
|
||||
(uint32_t *)&(g_thita3_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita3.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("thita4.dat",
|
||||
(uint32_t *)&(g_thita4_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita4.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("no1.dat",
|
||||
(uint32_t *)&(g_no1_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("no1.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("no2.dat",
|
||||
(uint32_t *)&(g_no2_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("no2.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("no3.dat",
|
||||
(uint32_t *)&(g_no3_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("no3.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("nextstate9.dat",
|
||||
(uint32_t *)&(g_nxtstate9_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("nextstate9.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("nextstate11.dat",
|
||||
(uint32_t *)&(g_nxtstate11_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("nextstate11.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("nextstate13.dat",
|
||||
(uint32_t *)&(g_nxtstate13_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("nextstate13.dat load fail!\n");
|
||||
}
|
||||
LOG_INFO_S("trasnform para dat init & load finish!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//设置存储寄存器变量
|
||||
int transform_set_para(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init)
|
||||
{
|
||||
g_thita1_val = thita1_init;
|
||||
g_thita2_val = thita2_init;
|
||||
g_thita34_val = thita34_init;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//递推n次
|
||||
int transform_para_update(uint32_t n)
|
||||
{
|
||||
g_thita1_val = (g_thita1_val +n) %(THITA1_LEN);
|
||||
g_thita2_val = (g_thita2_val +n) %(THITA2_LEN);
|
||||
g_thita34_val = (g_thita34_val +n) %(THITA34_LEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//根据pcie返回的结果计算当前状态
|
||||
int transform_decode_para(uint32_t thita1_para, uint32_t thita2_para, uint32_t thita34_para)
|
||||
{
|
||||
//根据pcie提供的值查no1/2/3系列表,得到next偏移量
|
||||
volatile uint32_t temp1 = LOAD_EX_W(g_no1_addr + (thita1_para<<2));
|
||||
volatile uint32_t temp2 = LOAD_EX_W(g_no2_addr + (thita2_para<<2));
|
||||
volatile uint32_t temp3 = LOAD_EX_W(g_no3_addr + (thita34_para<<2));
|
||||
|
||||
//根据next9/11/13系列表,结合偏移量查询计算的时间点下的参数
|
||||
temp1 = LOAD_EX_W(g_nxtstate9_addr + (temp1<<2));
|
||||
temp2 = LOAD_EX_W(g_nxtstate11_addr + (temp2<<2));
|
||||
temp3 = LOAD_EX_W(g_nxtstate13_addr + (temp3<<2));
|
||||
|
||||
//算好后更新参数
|
||||
transform_set_para(temp1, temp2, temp3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//根据时序偏差更新寄存器参数
|
||||
int transform_update_cur_para(uint32_t cur_sfn, uint32_t cur_slot, uint32_t ref_sfn, uint32_t ref_slot)
|
||||
{
|
||||
uint32_t interval_slot_num;
|
||||
//假设两者的间隔不超过1024个sfn,周期1024*20slot
|
||||
if((cur_sfn == ref_sfn) && (cur_slot < ref_slot))
|
||||
{
|
||||
interval_slot_num = NR_SFN_NUM*NR_SFN_SLOT_NUM + cur_slot - ref_slot;
|
||||
}
|
||||
else if(cur_sfn < ref_sfn)
|
||||
{
|
||||
interval_slot_num = (ref_sfn + NR_SFN_NUM - cur_sfn)*NR_SFN_SLOT_NUM + ref_slot - cur_slot;
|
||||
}
|
||||
else
|
||||
{
|
||||
interval_slot_num = (cur_sfn - ref_sfn)*NR_SFN_SLOT_NUM + cur_slot - ref_slot;
|
||||
}
|
||||
|
||||
//递推
|
||||
transform_para_update(interval_slot_num);
|
||||
|
||||
return 0;
|
||||
#include "transform_para_func.h"
|
||||
|
||||
volatile uint32_t g_thita1_val;
|
||||
volatile uint32_t g_thita2_val;
|
||||
volatile uint32_t g_thita34_val;
|
||||
|
||||
double thita2imag[4][4] = {{0.382683432365090, 0.923879532511287, -0.382683432365090, -0.923879532511287},
|
||||
{0.500000000000000, 0.866025403784439, -0.500000000000000, -0.866025403784439},
|
||||
{0.707106781186548, 0.707106781186548, -0.707106781186548, -0.707106781186548},
|
||||
{0.866025403784439, 0.500000000000000, -0.866025403784439, -0.500000000000000}};
|
||||
|
||||
double thita2real[4][4] = {{0.923879532511287, -0.382683432365090, -0.923879532511287, 0.382683432365090},
|
||||
{0.866025403784439, -0.500000000000000, -0.866025403784439, 0.500000000000000},
|
||||
{0.707106781186548, -0.707106781186548, -0.707106781186548, 0.707106781186547},
|
||||
{0.500000000000000, -0.866025403784439, -0.500000000000000, 0.866025403784438}};
|
||||
|
||||
|
||||
|
||||
//查bit具体值使用的表
|
||||
uint32_t g_thita1_addr;
|
||||
uint32_t g_thita2_addr;
|
||||
uint32_t g_thita3_addr;
|
||||
uint32_t g_thita4_addr;
|
||||
//查解算表2偏移量使用的表
|
||||
uint32_t g_no1_addr;
|
||||
uint32_t g_no2_addr;
|
||||
uint32_t g_no3_addr;
|
||||
//查解算得到的序号值使用的表
|
||||
uint32_t g_nxtstate9_addr;
|
||||
uint32_t g_nxtstate11_addr;
|
||||
uint32_t g_nxtstate13_addr;
|
||||
uint32_t g_thita_len;//not use
|
||||
|
||||
int transform_para_init(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init)
|
||||
{
|
||||
//配置初始值
|
||||
transform_set_para(thita1_init, thita2_init, thita34_init);
|
||||
|
||||
//载入查表文件到ddr,获取数据首地址存为全局变量
|
||||
uint32_t ret = -1;
|
||||
ret = osp_get_cfgfile("thita1.dat",
|
||||
(uint32_t *)&(g_thita1_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita1.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("thita2.dat",
|
||||
(uint32_t *)&(g_thita2_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita2.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("thita3.dat",
|
||||
(uint32_t *)&(g_thita3_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita3.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("thita4.dat",
|
||||
(uint32_t *)&(g_thita4_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("thita4.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("no1.dat",
|
||||
(uint32_t *)&(g_no1_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("no1.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("no2.dat",
|
||||
(uint32_t *)&(g_no2_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("no2.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("no3.dat",
|
||||
(uint32_t *)&(g_no3_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("no3.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("nextstate9.dat",
|
||||
(uint32_t *)&(g_nxtstate9_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("nextstate9.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("nextstate11.dat",
|
||||
(uint32_t *)&(g_nxtstate11_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("nextstate11.dat load fail!\n");
|
||||
}
|
||||
ret = osp_get_cfgfile("nextstate13.dat",
|
||||
(uint32_t *)&(g_nxtstate13_addr),
|
||||
(int32_t *)&(g_thita_len));
|
||||
if(0 != ret)
|
||||
{
|
||||
LOG_ERROR_S("nextstate13.dat load fail!\n");
|
||||
}
|
||||
LOG_INFO_S("trasnform para dat init & load finish!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//设置存储寄存器变量
|
||||
int transform_set_para(uint32_t thita1_init, uint32_t thita2_init, uint32_t thita34_init)
|
||||
{
|
||||
g_thita1_val = thita1_init;
|
||||
g_thita2_val = thita2_init;
|
||||
g_thita34_val = thita34_init;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//递推n次
|
||||
int transform_para_update(uint32_t n)
|
||||
{
|
||||
g_thita1_val = (g_thita1_val +n) %(THITA1_LEN);
|
||||
g_thita2_val = (g_thita2_val +n) %(THITA2_LEN);
|
||||
g_thita34_val = (g_thita34_val +n) %(THITA34_LEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//根据pcie返回的结果计算当前状态
|
||||
int transform_decode_para(uint32_t thita1_para, uint32_t thita2_para, uint32_t thita34_para)
|
||||
{
|
||||
//根据pcie提供的值查no1/2/3系列表,得到next偏移量
|
||||
volatile uint32_t temp1 = LOAD_EX_W(g_no1_addr + (thita1_para<<2));
|
||||
volatile uint32_t temp2 = LOAD_EX_W(g_no2_addr + (thita2_para<<2));
|
||||
volatile uint32_t temp3 = LOAD_EX_W(g_no3_addr + (thita34_para<<2));
|
||||
|
||||
//根据next9/11/13系列表,结合偏移量查询计算的时间点下的参数
|
||||
temp1 = LOAD_EX_W(g_nxtstate9_addr + (temp1<<2));
|
||||
temp2 = LOAD_EX_W(g_nxtstate11_addr + (temp2<<2));
|
||||
temp3 = LOAD_EX_W(g_nxtstate13_addr + (temp3<<2));
|
||||
|
||||
//算好后更新参数
|
||||
transform_set_para(temp1, temp2, temp3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//根据时序偏差更新寄存器参数
|
||||
int transform_update_cur_para(uint32_t cur_sfn, uint32_t cur_slot, uint32_t ref_sfn, uint32_t ref_slot)
|
||||
{
|
||||
uint32_t interval_slot_num;
|
||||
//假设两者的间隔不超过1024个sfn,周期1024*20slot
|
||||
if((cur_sfn == ref_sfn) && (cur_slot < ref_slot))
|
||||
{
|
||||
interval_slot_num = NR_SFN_NUM*NR_SFN_SLOT_NUM + cur_slot - ref_slot;
|
||||
}
|
||||
else if(cur_sfn < ref_sfn)
|
||||
{
|
||||
interval_slot_num = (ref_sfn + NR_SFN_NUM - cur_sfn)*NR_SFN_SLOT_NUM + cur_slot - ref_slot;
|
||||
}
|
||||
else
|
||||
{
|
||||
interval_slot_num = (cur_sfn - ref_sfn)*NR_SFN_SLOT_NUM + cur_slot - ref_slot;
|
||||
}
|
||||
|
||||
//递推
|
||||
transform_para_update(interval_slot_num);
|
||||
|
||||
return 0;
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
|
||||
*****************************************************************/
|
||||
#include "transmitter_func.h"
|
||||
|
||||
#include "transform_para_func.h"
|
||||
|
||||
/*!
|
||||
* @brief: Transmitter任务启动前的初始化工作
|
||||
@ -74,4 +74,6 @@ void Transmitter_Init()
|
||||
// (uint32_t *)&(g_transmitter_table_param.transmitter_config3_ddr_ptr),
|
||||
// (int32_t *)&(g_transmitter_table_param.transmitter_config3_length));
|
||||
LOG_ERROR_S("Transmitter_INIT finish\n");
|
||||
|
||||
transform_para_init(0, 0, 0);
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
*****************************************************************/
|
||||
#include "transmitter_func.h"
|
||||
#include "mem_def.h"
|
||||
#include "transform_para_func.h"
|
||||
//#include "log_interface.h"
|
||||
|
||||
/*!
|
||||
@ -316,19 +317,28 @@ void Transmitter_Proc(
|
||||
uint32_t TRANSMOUT_symbol_SM_addr_in = TRANSMITTER_OUT;//SM
|
||||
uint32_t TRANSMOUT_symbol_SM_addr_out = TRANSMITTER_OUT + 14*4096*4 + 4*1024;
|
||||
uint32_t TRANSMOUT_DATA_SM_addr_out = TRANSMOUT_symbol_SM_addr_out + 14*4096*4 + 4*1024;
|
||||
double thita[6] = {0.435,2.784,1.864,1.211,2.546,2.011};
|
||||
|
||||
double thita[4] = {0};
|
||||
double i_real[4] = {0};
|
||||
double i_imag[4] = {0};
|
||||
|
||||
i_real[0] = transform_get_thita1_real();
|
||||
i_real[1] = transform_get_thita2_real();
|
||||
i_real[2] = transform_get_thita3_real();
|
||||
i_real[3] = transform_get_thita4_real();
|
||||
|
||||
i_imag[0] = transform_get_thita1_imag();
|
||||
i_imag[1] = transform_get_thita2_imag();
|
||||
i_imag[2] = transform_get_thita3_imag();
|
||||
i_imag[3] = transform_get_thita4_imag();
|
||||
|
||||
double* thita1, * thita2, * thita3;
|
||||
thita1 = thita2 = thita;
|
||||
thita3 = thita + 2;
|
||||
thita1 = thita2 = thita3 = thita;
|
||||
thita3 = thita;
|
||||
|
||||
cfg_addr = (int32_t *)transmitter_config_dm1_ptr + g_transmitter_table_param.TransformConfig_8_CFG3_Offset;
|
||||
PilotData =transmitter_config_dm1_ptr + g_transmitter_table_param.Pilot_Data_Offset;
|
||||
PilotTrans = mpu_temp_dm3_ptr;
|
||||
Transform((int)cfg_addr,MPU_ADDR(PilotData),MPU_ADDR(PilotTrans), 8, thita1, 1);
|
||||
Transform((int)cfg_addr,MPU_ADDR(PilotData),MPU_ADDR(PilotTrans), 8, i_real, i_imag, 1);
|
||||
SVRReg[0] = MPU_ADDR(cfg_addr);
|
||||
Transform8Asm(SVRReg);
|
||||
WAIT_MPU_STOP;
|
||||
@ -392,7 +402,7 @@ void Transmitter_Proc(
|
||||
//'InputData' size is 14*512 point equals to 14*512*32bit
|
||||
//WAIT_MPU_STOP;
|
||||
|
||||
Transform((int)cfg_addr,MPU_ADDR(InputAddr_Trans),MPU_ADDR(TransTemp), 2, thita2, 1);
|
||||
Transform((int)cfg_addr,MPU_ADDR(InputAddr_Trans),MPU_ADDR(TransTemp), 2, i_real, i_imag, 1);
|
||||
SVRReg[0] = MPU_ADDR(cfg_addr);
|
||||
Transform2Asm(SVRReg);
|
||||
WAIT_MPU_STOP;
|
||||
@ -432,7 +442,7 @@ void Transmitter_Proc(
|
||||
);
|
||||
|
||||
//data block size is 2*4096 point equals to 2*4096*32bit
|
||||
Transform((int)cfg_addr,MPU_ADDR(TransTemp),MPU_ADDR(OutputAddr_Trans), 4, thita3, 1);
|
||||
Transform((int)cfg_addr,MPU_ADDR(TransTemp),MPU_ADDR(OutputAddr_Trans), 4, i_real, i_imag, 1);
|
||||
SVRReg[0] = MPU_ADDR(cfg_addr);
|
||||
Transform4Asm(SVRReg);
|
||||
WAIT_MPU_STOP;
|
||||
@ -551,7 +561,8 @@ void Transmitter_Proc(
|
||||
//'OutData' size is 2*4096 point equals to 2*4096*32bit
|
||||
}
|
||||
//**********************pilot trans**********************
|
||||
|
||||
//发送数据后更新递推
|
||||
transform_para_update(1);
|
||||
|
||||
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
//空间规划:
|
||||
/*
|
||||
SM0:()
|
||||
SM1:(1M)用于recv_symb双核任务处理的数据临时存放空间
|
||||
SM5:(1201/1024KB)用于存放RECV_SYNC后给RECV_SYMB的数据
|
||||
SM2:(/1536KB)用于存放Transmitter的输出结果
|
||||
*/
|
||||
@ -82,12 +83,13 @@
|
||||
/************************************SM5--1.5M***********************************************/
|
||||
|
||||
/**************************************DDR***************************************************/
|
||||
#define DDR_PHY_BASE (0x6BC00000) //共579M可用0x6BC00000-0x8FFFFFFF
|
||||
//1.93GB可用0x14400000-0x8FFFFFFF
|
||||
#define DDR_PHY_BASE (0x14400000)
|
||||
#define DDR_ERROR_RECORD_CNT_ADDR (0x79FF8000)
|
||||
#define DDR_STATE_RECORD_CNT_ADDR (0x79FFc000)
|
||||
|
||||
//接收端数据来源选择
|
||||
|
||||
//---------------TX RX JESD地址接口---------------------------------------------------------
|
||||
#define JESD_NRFDD_TX_SLOT_EVEN_DATA_ADDR (0x60F00000) //0x1E0000
|
||||
#define JESD_NRFDD_TX_SLOT_ODD_DATA_ADDR (0x610E0000) //0x1E0000
|
||||
|
||||
@ -95,17 +97,30 @@
|
||||
#define JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR (0x6BC00000) //!!!DDR_PHY_BASE 0x1E0000
|
||||
#define JESD_NRFDD_RX_SLOT_ODD_DATA_ADDR (0x6BDE0000) // 0x1E0000
|
||||
#else
|
||||
//---------------RECV测试用DDR空间--------------------------------------
|
||||
#define JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR (0x88800000) //61440*4
|
||||
#define JESD_NRFDD_RX_SLOT_ODD_DATA_ADDR (0x8883c000) //
|
||||
#endif
|
||||
#define JESD_NRFDD_RX_SLOT_SRC0_DATA_ADDR (0x6BFC0000) // 61440*4 用于暂存数据供first_sync处理
|
||||
#define JESD_NRFDD_RX_SLOT_SRC1_DATA_ADDR (0x6BFFC000) // 2048*4 用于暂存数据供first_sync处理
|
||||
//---------------APE4 RECV START FIRSTSYNC FLAG---------------------------------------------
|
||||
#define RECV_FIRST_SYNC_START_FLAG (0x82000000) //通过手动输入来开始接收端第一次同步 devmem 0x82000000 0xa5a55a5a 32
|
||||
//---------------APE7 PCIE TO APE4 sync_proc
|
||||
#define TRANSFORM_REF_PARA_PCIE2SYNC_ADDR (0x83000000)
|
||||
|
||||
#define SOURCE_DATA_DDR_ADDR (0x84C01000)
|
||||
#define SOURCE_DATA_FLAG_DDR_ADDR (0x84C00000) // SPU READ FLAG
|
||||
//---------------ARM Transmitter比特存放地址,大小SOURCE_DATA_BYTE_LENGTH*SOURCE_DATA_BUFFER_NUM = 313KB
|
||||
#define SOURCE_DATA_FLAG_DDR_ADDR (0x84000000) // SPU READ FLAG
|
||||
#define SOURCE_DATA_DDR_ADDR (0x84001000)
|
||||
#define SOURCE_DATA_BUFFER_NUM (20)
|
||||
#define SOURCE_DATA_BYTE_LENGTH (16016)
|
||||
|
||||
|
||||
#define SOURCE_DATA_DDR_ADDR_END (SOURCE_DATA_DDR_ADDR + SOURCE_DATA_BUFFER_NUM*SOURCE_DATA_BYTE_LENGTH + 0x100)
|
||||
//--------------ARM RECV data存放地址,大小
|
||||
#define RECV_BIT_OUT_DATA_FLAG_DDR_ADDR (0x85000000) // SPU READ FLAG
|
||||
#define RECV_BIT_OUT_DATA_DDR_ADDR (0x85001000)
|
||||
#define RECV_BIT_OUT_DATA_BUFFER_NUM (8)
|
||||
#define RECV_BIT_OUT_DATA_BYTE_LENGTH (16016)
|
||||
#define RECV_BIT_OUT_DATA_DDR_ADDR_END (RECV_BIT_OUT_DATA_DDR_ADDR + RECV_BIT_OUT_DATA_BUFFER_NUM*RECV_BIT_OUT_DATA_BYTE_LENGTH + 0x100)
|
||||
//-----------------------------TRACE打点相关空间-----------------------------------------------------------------
|
||||
#define TRACE_RECEIVER_ADDR (0x88700000)
|
||||
#define TRACE_RECV_INIT_ADDR (TRACE_RECEIVER_ADDR) //0x88700000
|
||||
#define TRACE_SLOTIND_ADDR (TRACE_RECV_INIT_ADDR + TRACE_GRP_LEN) //0x88700200
|
||||
|
File diff suppressed because it is too large
Load Diff
16382
Config/nextstate13.dat
16382
Config/nextstate13.dat
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1022
Config/no1.dat
1022
Config/no1.dat
File diff suppressed because it is too large
Load Diff
4094
Config/no2.dat
4094
Config/no2.dat
File diff suppressed because it is too large
Load Diff
16382
Config/no3.dat
16382
Config/no3.dat
File diff suppressed because it is too large
Load Diff
1022
Config/thita1.dat
1022
Config/thita1.dat
File diff suppressed because it is too large
Load Diff
4094
Config/thita2.dat
4094
Config/thita2.dat
File diff suppressed because it is too large
Load Diff
16382
Config/thita3.dat
16382
Config/thita3.dat
File diff suppressed because it is too large
Load Diff
16382
Config/thita4.dat
16382
Config/thita4.dat
File diff suppressed because it is too large
Load Diff
18
Interface/interface_pcie2_rec_sync.h
Normal file
18
Interface/interface_pcie2_rec_sync.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef INTERFACE_PCIE2_REC_SYNC_H
|
||||
#define INTERFACE_PCIE2_REC_SYNC_H
|
||||
#include "type_define.h"
|
||||
|
||||
typedef struct receiver_pcie2sync_s
|
||||
{
|
||||
uint32_t status;
|
||||
uint32_t ref_sfn;//创建任务时刻的sfn
|
||||
uint32_t ref_slot;//创建任务时刻的slot
|
||||
uint32_t thita1_val;
|
||||
uint32_t thita2_val;
|
||||
uint32_t thita34_val;
|
||||
}receiver_pcie2sync_t;
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /*INTERFACE_PCIE2_REC_SYNC_H*/
|
@ -12,6 +12,8 @@ typedef struct receiver_sync2symb_s
|
||||
uint32_t data_section1_ptr;
|
||||
uint32_t data_section0_length;//单位Word
|
||||
uint32_t data_section1_length;//单位Word
|
||||
double transform_para_real[4];
|
||||
double transform_para_imag[4];
|
||||
|
||||
}receiver_sync2symb_t;
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include "ucps2.h"
|
||||
|
||||
|
||||
void Transform(int ConfigAddr, int InAddr, int OutAddr, int N, double* thita, int direct);
|
||||
void Transform(int ConfigAddr, int InAddr, int OutAddr, int N, double* db_real, double* db_imag, int direct);
|
||||
void get_thita(int* current_state, double* thita);
|
||||
MPU_ENTRY void Transform2Asm(v16u32 src);
|
||||
MPU_ENTRY void Transform4Asm(v16u32 src);
|
||||
|
@ -2,22 +2,22 @@
|
||||
#include <math.h>
|
||||
#include <Transform.h>
|
||||
#define PI 3.1415926
|
||||
#define imag(x) (x&0xffff)<<16
|
||||
#define real(x) x&0xffff
|
||||
#define imag(x) (((x)&0xffff)<<16)
|
||||
#define real(x) ((x)&0xffff)
|
||||
|
||||
//factor range in [0~1]
|
||||
|
||||
void GenParam(double thita[], int* i_real,int* i_imag, int degree,int direct){
|
||||
void GenParam(double db_real[], double db_imag[], int* i_real,int* i_imag, int degree,int direct){
|
||||
|
||||
switch(degree){
|
||||
case(2):
|
||||
{
|
||||
double p_real[2] = {0};
|
||||
double p_imag[2] = {0};
|
||||
double G1_I[2] = { cos(thita[0]), cos(thita[0]) };
|
||||
double G1_Q[2] = { sin(thita[0]), sin(thita[0]) };
|
||||
double G2_I[2] = { cos(thita[1]),-cos(thita[1]) };
|
||||
double G2_Q[2] = { sin(thita[1]), -sin(thita[1]) };
|
||||
double G1_I[2] = { db_real[0], db_real[0] };
|
||||
double G1_Q[2] = { db_imag[0], db_imag[0] };
|
||||
double G2_I[2] = { db_real[1],-db_real[1] };
|
||||
double G2_Q[2] = { db_imag[1], -db_imag[1] };
|
||||
double I[2];
|
||||
double Q[2];
|
||||
I[0] = (G1_I[0] + G2_I[0]) / 2;
|
||||
@ -44,17 +44,17 @@ void GenParam(double thita[], int* i_real,int* i_imag, int degree,int direct){
|
||||
{
|
||||
double p_real[4] = {0};
|
||||
double p_imag[4] = {0};
|
||||
double G1_I[4] = { cos(thita[0]), cos(thita[0]) ,cos(thita[0]), cos(thita[0])};//[1 1 1 1]
|
||||
double G1_Q[4] = { sin(thita[0]), sin(thita[0]) ,sin(thita[0]), sin(thita[0])};
|
||||
double G1_I[4] = { db_real[0], db_real[0] ,db_real[0], db_real[0]};//[1 1 1 1]
|
||||
double G1_Q[4] = { db_imag[0], db_imag[0] ,db_imag[0], db_imag[0]};
|
||||
|
||||
double G2_I[4] = { cos(thita[1]),-sin(thita[1]) ,-cos(thita[1]) ,sin(thita[1]) };//[1 i -1 -i]
|
||||
double G2_Q[4] = { sin(thita[1]),cos(thita[1]) ,-sin(thita[1]) ,-cos(thita[1]) };
|
||||
double G2_I[4] = { db_real[1],-db_imag[1] ,-db_real[1] ,db_imag[1] };//[1 i -1 -i]
|
||||
double G2_Q[4] = { db_imag[1],db_real[1] ,-db_imag[1] ,-db_real[1] };
|
||||
|
||||
double G3_I[4] = { cos(thita[2]), -cos(thita[2]),cos(thita[2]), -cos(thita[2]) };//[1 -1 1 -1]
|
||||
double G3_Q[4] = { sin(thita[2]), -sin(thita[2]),sin(thita[2]), -sin(thita[2]) };
|
||||
double G3_I[4] = { db_real[2], -db_real[2],db_real[2], -db_real[2] };//[1 -1 1 -1]
|
||||
double G3_Q[4] = { db_imag[2], -db_imag[2],db_imag[2], -db_imag[2] };
|
||||
|
||||
double G4_I[4] = { cos(thita[3]), sin(thita[3]), -cos(thita[3]) , -sin(thita[3]) };//[1 -i -1 i]
|
||||
double G4_Q[4] = { sin(thita[3]), -cos(thita[3]), -sin(thita[3]), cos(thita[3]) };
|
||||
double G4_I[4] = { db_real[3], db_imag[3], -db_real[3] , -db_imag[3] };//[1 -i -1 i]
|
||||
double G4_Q[4] = { db_imag[3], -db_real[3], -db_imag[3], db_real[3] };
|
||||
double I[4];
|
||||
double Q[4];
|
||||
for(int i =0;i<4;i++){
|
||||
@ -96,17 +96,17 @@ void GenParam(double thita[], int* i_real,int* i_imag, int degree,int direct){
|
||||
{
|
||||
double p_real[8] = {0};
|
||||
double p_imag[8] = {0};
|
||||
double G1_I[4] = { cos(thita[0]), cos(thita[0]) ,cos(thita[0]), cos(thita[0])};//[1 1 1 1]
|
||||
double G1_Q[4] = { sin(thita[0]), sin(thita[0]) ,sin(thita[0]), sin(thita[0])};
|
||||
double G1_I[4] = { db_real[0], db_real[0] ,db_real[0], db_real[0]};//[1 1 1 1]
|
||||
double G1_Q[4] = { db_imag[0], db_imag[0] ,db_imag[0], db_imag[0]};
|
||||
|
||||
double G2_I[4] = { cos(thita[1]),-sin(thita[1]) ,-cos(thita[1]) ,sin(thita[1]) };//[1 i -1 -i]
|
||||
double G2_Q[4] = { sin(thita[1]),cos(thita[1]) ,-sin(thita[1]) ,-cos(thita[1]) };
|
||||
double G2_I[4] = { db_real[1],-db_imag[1] ,-db_real[1] ,db_imag[1] };//[1 i -1 -i]
|
||||
double G2_Q[4] = { db_imag[1],db_real[1] ,-db_imag[1] ,-db_real[1] };
|
||||
|
||||
double G3_I[4] = { cos(thita[2]), -cos(thita[2]),cos(thita[2]), -cos(thita[2]) };//[1 -1 1 -1]
|
||||
double G3_Q[4] = { sin(thita[2]), -sin(thita[2]),sin(thita[2]), -sin(thita[2]) };
|
||||
double G3_I[4] = { db_real[2], -db_real[2],db_real[2], -db_real[2] };//[1 -1 1 -1]
|
||||
double G3_Q[4] = { db_imag[2], -db_imag[2],db_imag[2], -db_imag[2] };
|
||||
|
||||
double G4_I[4] = { cos(thita[3]), sin(thita[3]), -cos(thita[3]) , -sin(thita[3]) };//[1 -i -1 i]
|
||||
double G4_Q[4] = { sin(thita[3]), -cos(thita[3]), -sin(thita[3]), cos(thita[3]) };
|
||||
double G4_I[4] = { db_real[3], db_imag[3], -db_real[3] , -db_imag[3] };//[1 -i -1 i]
|
||||
double G4_Q[4] = { db_imag[3], -db_real[3], -db_imag[3], db_real[3] };
|
||||
double I[8];
|
||||
double Q[8];
|
||||
for(int j=0; j<4; j++)
|
||||
@ -228,7 +228,7 @@ int sign_extend_16_to_32(int num)
|
||||
return (num<<16)>>16;
|
||||
}
|
||||
|
||||
void Transform(int ConfigAddr, int InAddr, int OutAddr, int N, double* thita, int direct)
|
||||
void Transform(int ConfigAddr, int InAddr, int OutAddr, int N, double* db_real, double* db_imag, int direct)
|
||||
{
|
||||
volatile int a;
|
||||
int *Para = (int *)ConfigAddr;
|
||||
@ -236,7 +236,7 @@ void Transform(int ConfigAddr, int InAddr, int OutAddr, int N, double* thita, in
|
||||
int i_real[8] = {0};
|
||||
int i_imag[8] = {0};
|
||||
|
||||
GenParam(thita,i_real,i_imag,N,direct);
|
||||
GenParam(db_real, db_imag, i_real, i_imag,N,direct);
|
||||
|
||||
switch(N)
|
||||
{
|
||||
|
@ -1,102 +0,0 @@
|
||||
//Mfetch 0
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//ShiftMode 1
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
//input 2
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//output 3
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index1 4
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index2 5
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000
|
@ -1,136 +0,0 @@
|
||||
//Mfetch 0
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//ShiftMode 1 right move 2
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
//input 2
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//output 3
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index1 4
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index2 5
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index3 6
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index4 7
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000
|
@ -1,204 +0,0 @@
|
||||
//Mfetch 0
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//ShiftMode 1 right move 2
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
0x00000203,
|
||||
//input 2
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//output 3
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index1 4
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index2 5
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index3 6
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index4 7
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index5 8
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index6 9
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index7 10
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index8 11
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,14 +0,0 @@
|
||||
#ifndef Transform_H_
|
||||
#define Transform_H_
|
||||
#include "ucps2.h"
|
||||
|
||||
|
||||
void Transform(int ConfigAddr, int InAddr, int OutAddr, int N, double* thita, int direct);
|
||||
void get_thita(int* current_state, double* thita);
|
||||
void RowCopy(int* Matrix,int* Block,int idx,int direct);
|
||||
void ColCopy(int* Matrix,int* Block,int idx,int direct);
|
||||
MPU_ENTRY void Transform2Asm(v16u32 src);
|
||||
MPU_ENTRY void Transform4Asm(v16u32 src);
|
||||
MPU_ENTRY void Transform8Asm(v16u32 src);
|
||||
|
||||
#endif /* Transform_H_ */
|
@ -1,102 +0,0 @@
|
||||
//Mfetch 0
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//ShiftMode 1
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
//input 2
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//output 3
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index1 4
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index2 5
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000
|
@ -1,136 +0,0 @@
|
||||
//Mfetch 0
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//ShiftMode 1
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
//input 2
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//output 3
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index1 4
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index2 5
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index3 6
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index4 7
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000
|
@ -1,204 +0,0 @@
|
||||
//Mfetch 0
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//ShiftMode 1
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
0x00000003,
|
||||
//input 2
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//output 3
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000040,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0xffffffff,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x003fffff,
|
||||
0x0000000e,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index1 4
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index2 5
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index3 6
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index4 7
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index5 8
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index6 9
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index7 10
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
//Index8 11
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000
|
@ -1,10 +0,0 @@
|
||||
#ifndef UCP2_UTILS_H_
|
||||
#define UCP2_UTILS_H_
|
||||
|
||||
void write_to_dm0(char* src, unsigned int size);
|
||||
void print_string(char* string);
|
||||
void print_char(unsigned char src);
|
||||
void print_int(unsigned int src);
|
||||
|
||||
#endif /* UCP2_UTILS_H_ */
|
||||
|
@ -1,60 +0,0 @@
|
||||
.section .text.m0, "ax"
|
||||
.file "Transform2Asm.m0.asm"
|
||||
// DO NOT MODIFY THE CONTENT ABOVE
|
||||
|
||||
|
||||
.global Transform2Asm
|
||||
|
||||
|
||||
Transform2Asm:
|
||||
R1: M[0] -> BIU1.T0;
|
||||
NOP;
|
||||
NOP;
|
||||
NOP;
|
||||
BIU1:Load(T0)(A++) -> M[0](Mode0); //KI
|
||||
BIU1:Load(T0)(A++) -> M[1](Mode0); //ShiftMode
|
||||
BIU1:Load(T0)(A++) -> M[2](Mode0); //Input
|
||||
BIU1:Load(T0)(A++) -> M[3](Mode0); //Output
|
||||
BIU1:Load(T0)(A++) -> M[10](Mode0); //factor1
|
||||
BIU1:Load(T0)(A++) -> M[11](Mode0); //factor2
|
||||
NOP;
|
||||
NOP;
|
||||
NOP;
|
||||
NOP;
|
||||
R5:PreConfig(M[0])(Mode0);
|
||||
R0:M[1] -> IMA0.T0(Mode0) || R5:WriteConf(Mfetch)->KI[0-3](Mode0);
|
||||
R0:M[1] -> IMA1.T0(Mode0) || R2:M[2] -> BIU2.T0(Mode0);
|
||||
R3:M[3] -> BIU3.T1(Mode0);
|
||||
R0:M[10] -> IMA0.T1(Mode0) ||R1:M[10] -> IMA1.T2(Mode0) ;
|
||||
R0:M[11] -> IMA0.T2(Mode0) ||R1:M[11] -> IMA1.T1(Mode0) || IMA0:SetShiftMode(T0) -> SHIFTMODE0(Mode0);//load factor to IMA
|
||||
IMA1:SetShiftMode(T0) -> SHIFTMODE0(Mode0);
|
||||
|
||||
BIU2:wait 0 || IMA0: wait 10 || IMA1: wait 10|| SHU0: wait 14 ||SHU1: wait 14 ||BIU3: wait 17;
|
||||
MFetch:LPTO %BLOCK @(KI0 - 0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA1.T0(Mode0) || IMA1: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T1(Mode0) || SHU0: T0+T1(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA1.T0(Mode0) || IMA1: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T1(Mode0) || SHU1: T0+T1(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BLOCK:
|
||||
BIU2:wait 0 || IMA0: wait 0 || IMA1: wait 0 || SHU0: wait 0 || SHU1: wait 0 || BIU3: wait 0;
|
||||
|
||||
/*
|
||||
BIU2:wait 0 || IMA0: wait 10 || IMA1: wait 10|| SHU0: wait 10 ||SHU1: wait 10 ||BIU3: wait 13;
|
||||
MFetch:LPTO %BLOCK_0 @(KI0 - 0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA1.T0(Mode0) || IMA1: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0);
|
||||
NOP;
|
||||
NOP;
|
||||
NOP;
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T1(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA1.T0(Mode0) || IMA1: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T1(Mode0);
|
||||
NOP;
|
||||
NOP;
|
||||
NOP;
|
||||
SHU0: T0+T1(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
SHU1: T0+T1(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BLOCK_0:
|
||||
BIU2:wait 0 || IMA0: wait 0 || IMA1: wait 0 || SHU0: wait 0 || SHU1: wait 0 || BIU3: wait 0;
|
||||
*/
|
||||
MFetch:REPEAT @(35);
|
||||
MFetch:MPU.STOP;
|
@ -1,56 +0,0 @@
|
||||
.section .text.m0, "ax"
|
||||
.file "Transform4Asm.m0.asm"
|
||||
// DO NOT MODIFY THE CONTENT ABOVE
|
||||
|
||||
|
||||
.global Transform4Asm
|
||||
|
||||
|
||||
Transform4Asm:
|
||||
R1: M[0] -> BIU1.T0;
|
||||
NOP;
|
||||
NOP;
|
||||
NOP;
|
||||
BIU1:Load(T0)(A++) -> M[0](Mode0); //KI
|
||||
BIU1:Load(T0)(A++) -> M[1](Mode0); //ShiftMode
|
||||
BIU1:Load(T0)(A++) -> M[2](Mode0); //Input
|
||||
BIU1:Load(T0)(A++) -> M[3](Mode0); //Output
|
||||
BIU1:Load(T0)(A++) -> M[10](Mode0); //factor1
|
||||
BIU1:Load(T0)(A++) -> M[11](Mode0); //factor2
|
||||
BIU1:Load(T0)(A++) -> M[12](Mode0); //factor3
|
||||
BIU1:Load(T0)(A++) -> M[13](Mode0); //factor4
|
||||
NOP;
|
||||
NOP;
|
||||
R5:PreConfig(M[0])(Mode0);
|
||||
R0:M[1] -> IMA0.T0(Mode0) || R5:WriteConf(Mfetch)->KI[0-3](Mode0);
|
||||
R0:M[1] -> IMA1.T0(Mode0) || R2:M[2] -> BIU2.T0(Mode0);
|
||||
R2:M[1] -> IMA2.T0(Mode0) || R3:M[3] -> BIU3.T1(Mode0);
|
||||
R0:M[10] -> IMA0.T1(Mode0) ||R2:M[1] -> IMA3.T0(Mode0) ;
|
||||
R0:M[11] -> IMA0.T2(Mode0) || R1: M[10] -> IMA1.T2(Mode0) || R2: M[10] -> IMA2.T3(Mode0) || R3: M[10] -> IMA3.T4(Mode0) || IMA0:SetShiftMode(T0) -> SHIFTMODE0(Mode0);//load factor to IMA
|
||||
R0:M[12] -> IMA0.T3(Mode0) || R1: M[11] -> IMA1.T3(Mode0) || R2: M[11] -> IMA2.T4(Mode0) || R3: M[11] -> IMA3.T1(Mode0) || IMA1:SetShiftMode(T0) -> SHIFTMODE0(Mode0);
|
||||
R0:M[13] -> IMA0.T4(Mode0) || R1: M[12] -> IMA1.T4(Mode0) || R2: M[12] -> IMA2.T1(Mode0) || R3: M[12] -> IMA3.T2(Mode0) || IMA2:SetShiftMode(T0) -> SHIFTMODE0(Mode0);
|
||||
R1: M[13] -> IMA1.T1(Mode0) || R2: M[13] -> IMA2.T2(Mode0) || R3: M[13] -> IMA3.T3(Mode0) ||IMA3:SetShiftMode(T0) -> SHIFTMODE0(Mode0);
|
||||
|
||||
BIU2:wait 0 || IMA0: wait 10 ||IMA1: wait 10 || IMA2: wait 10 || IMA3: wait 10 || SHU0: wait 14 || SHU1: wait 14 || SHU2: wait 14 || SHU3: wait 14 ||BIU3: wait 17;
|
||||
MFetch:LPTO %BLOCK @(KI0 - 0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T0(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T0(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T1(Mode0) || SHU0: T0+T1(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T1(Mode0) || SHU1: T0+T1(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T1(Mode0) || SHU2: T0+T1(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T1(Mode0) || SHU3: T0+T1(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) ||IMA0:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) ||IMA1:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) ||IMA2:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) ||IMA3:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) ||IMA0: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0) || SHU0: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) ||IMA1: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0) || SHU1: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) ||IMA2: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T0(Mode0) || SHU2: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) ||IMA3: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T0(Mode0) || SHU3: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BLOCK:
|
||||
BIU2:wait 0 || IMA0: wait 0 ||IMA1: wait 0 || IMA2: wait 0 || IMA3: wait 0 || SHU0: wait 0 || SHU1: wait 0 || SHU2: wait 0 || SHU3: wait 0 || BIU3: wait 0;
|
||||
|
||||
MFetch:REPEAT @(35);
|
||||
MFetch:MPU.STOP;
|
@ -1,118 +0,0 @@
|
||||
.section .text.m0, "ax"
|
||||
.file "Transform8Asm.m0.asm"
|
||||
// DO NOT MODIFY THE CONTENT ABOVE
|
||||
|
||||
|
||||
.global Transform8Asm
|
||||
|
||||
//need modify
|
||||
Transform8Asm:
|
||||
R1: M[0] -> BIU1.T0;
|
||||
NOP;
|
||||
NOP;
|
||||
NOP;
|
||||
BIU1:Load(T0)(A++) -> M[0](Mode0); //KI
|
||||
BIU1:Load(T0)(A++) -> M[1](Mode0); //ShiftMode
|
||||
BIU1:Load(T0)(A++) -> M[2](Mode0); //Input
|
||||
BIU1:Load(T0)(A++) -> M[3](Mode0); //Output
|
||||
BIU1:Load(T0)(A++) -> M[10](Mode0); //factor1
|
||||
BIU1:Load(T0)(A++) -> M[11](Mode0); //factor2
|
||||
BIU1:Load(T0)(A++) -> M[12](Mode0); //factor3
|
||||
BIU1:Load(T0)(A++) -> M[13](Mode0); //factor4
|
||||
BIU1:Load(T0)(A++) -> M[14](Mode0); //factor5
|
||||
BIU1:Load(T0)(A++) -> M[15](Mode0); //factor6
|
||||
BIU1:Load(T0)(A++) -> M[16](Mode0) || R5:PreConfig(M[0])(Mode0);//factor 7
|
||||
BIU1:Load(T0)(A++) -> M[17](Mode0) || R0:M[1] -> IMA0.T0(Mode0) || R5:WriteConf(Mfetch)->KI[0-3](Mode0);//factor 8
|
||||
R0:M[1] -> IMA1.T0(Mode0) || R2:M[2] -> BIU2.T0(Mode0) || R5:WriteConf(Mfetch)->KI[4-7](Mode0);
|
||||
R2:M[1] -> IMA2.T0(Mode0) || R3:M[3] -> BIU3.T1(Mode0) ;
|
||||
R0:M[10] -> IMA0.T1(Mode0) ||R2:M[1] -> IMA3.T0(Mode0) ;
|
||||
R0:M[11] -> IMA0.T2(Mode0) || R1: M[10] -> IMA1.T2(Mode0) || R2: M[10] -> IMA2.T3(Mode0) || R3: M[10] -> IMA3.T4(Mode0) || IMA0:SetShiftMode(T0) -> SHIFTMODE0(Mode0);//load factor to IMA
|
||||
R0:M[12] -> IMA0.T3(Mode0) || R1: M[11] -> IMA1.T3(Mode0) || R2: M[11] -> IMA2.T4(Mode0) ||IMA1:SetShiftMode(T0) -> SHIFTMODE0(Mode0);
|
||||
R0:M[13] -> IMA0.T4(Mode0) || R1: M[12] -> IMA1.T4(Mode0) || IMA2:SetShiftMode(T0) -> SHIFTMODE0(Mode0);
|
||||
IMA3:SetShiftMode(T0) -> SHIFTMODE0(Mode0);
|
||||
R3: M[15] -> IMA3.T1(Mode0);
|
||||
R2: M[16] -> IMA2.T1(Mode0) || R3: M[16] -> IMA3.T2(Mode0);
|
||||
R1: M[17] -> IMA1.T1(Mode0) || R2: M[17] -> IMA2.T2(Mode0) || R3: M[17] -> IMA3.T3(Mode0);
|
||||
|
||||
BIU2:wait 0 || IMA0: wait 10 ||IMA1: wait 10 || IMA2: wait 10 || IMA3: wait 10 || R0: wait 10 || R1: wait 10 || R2: wait 10 || R3: wait 10 || SHU0: wait 14 || SHU1: wait 14 || SHU2: wait 14 || SHU3: wait 14 ||BIU3: wait 17;
|
||||
MFetch:LPTO %BLOCK_0 @(KI0 - 0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0) || R0: M[14] -> IMA0.T1(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0) || R1: M[13] -> IMA1.T1(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T0(Mode0) || R2: M[12] -> IMA2.T1(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T0(Mode0) || R3: M[11] -> IMA3.T1(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T1(Mode0) || R0: M[15] -> IMA0.T2(Mode0) || SHU0: T0+T1(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T1(Mode0) || R1: M[14] -> IMA1.T2(Mode0) || SHU1: T0+T1(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T1(Mode0) || R2: M[13] -> IMA2.T2(Mode0) || SHU2: T0+T1(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T1(Mode0) || R3: M[12] -> IMA3.T2(Mode0) || SHU3: T0+T1(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[16] -> IMA0.T3(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[15] -> IMA1.T3(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[14] -> IMA2.T3(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[13] -> IMA3.T3(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[17] -> IMA0.T4(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[16] -> IMA1.T4(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[15] -> IMA2.T4(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[14] -> IMA3.T4(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[10] -> IMA0.T1(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[17] -> IMA1.T1(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[16] -> IMA2.T1(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[15] -> IMA3.T1(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[11] -> IMA0.T2(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[10] -> IMA1.T2(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[17] -> IMA2.T2(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[16] -> IMA3.T2(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[12] -> IMA0.T3(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[11] -> IMA1.T3(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[10] -> IMA2.T3(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[17] -> IMA3.T3(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0)|| R0: M[13] -> IMA0.T4(Mode0) || SHU0: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0)|| R1: M[12] -> IMA1.T4(Mode0) || SHU1: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T0(Mode0)|| R2: M[11] -> IMA2.T4(Mode0) || SHU2: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T0(Mode0)|| R3: M[10] -> IMA3.T4(Mode0) || SHU3: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BLOCK_0:
|
||||
BIU2:wait 0 || IMA0: wait 0 ||IMA1: wait 0 || IMA2: wait 0 || IMA3: wait 0 || R0: wait 0 || R1: wait 0 || R2: wait 0 || R3: wait 0 || SHU0: wait 0 || SHU1: wait 0 || SHU2: wait 0 || SHU3: wait 0 || BIU3: wait 0;
|
||||
|
||||
MFetch:REPEAT @(20);
|
||||
R0:M[14] -> IMA0.T1(Mode0) || R1:M[13] -> IMA1.T1(Mode0) || R2:M[12] -> IMA2.T1(Mode0) || R3:M[11] -> IMA3.T1(Mode0);
|
||||
R0:M[15] -> IMA0.T2(Mode0) || R1:M[14] -> IMA1.T2(Mode0) || R2:M[13] -> IMA2.T2(Mode0) || R3:M[12] -> IMA3.T2(Mode0);
|
||||
R0:M[16] -> IMA0.T3(Mode0) || R1:M[15] -> IMA1.T3(Mode0) || R2:M[14] -> IMA2.T3(Mode0) || R3:M[13] -> IMA3.T3(Mode0);
|
||||
R0:M[17] -> IMA0.T4(Mode0) || R1:M[16] -> IMA1.T4(Mode0) || R2:M[15] -> IMA2.T4(Mode0) || R3:M[14] -> IMA3.T4(Mode0);
|
||||
|
||||
BIU2:wait 0 || IMA0: wait 10 ||IMA1: wait 10 || IMA2: wait 10 || IMA3: wait 10 || R0: wait 10 || R1: wait 10 || R2: wait 10 || R3: wait 10 || SHU0: wait 14 || SHU1: wait 14 || SHU2: wait 14 || SHU3: wait 14 ||BIU3: wait 17;
|
||||
MFetch:LPTO %BLOCK_1 @(KI0 - 0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0) || R0: M[10] -> IMA0.T1(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0) || R1: M[17] -> IMA1.T1(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T0(Mode0) || R2: M[16] -> IMA2.T1(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T0(Mode0) || R3: M[15] -> IMA3.T1(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T1(Mode0) || R0: M[11] -> IMA0.T2(Mode0) || SHU0: T0+T1(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T1(Mode0) || R1: M[10] -> IMA1.T2(Mode0) || SHU1: T0+T1(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T1(Mode0) || R2: M[17] -> IMA2.T2(Mode0) || SHU2: T0+T1(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T1(Mode0) || R3: M[16] -> IMA3.T2(Mode0) || SHU3: T0+T1(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[12] -> IMA0.T3(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[11] -> IMA1.T3(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[10] -> IMA2.T3(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[17] -> IMA3.T3(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[13] -> IMA0.T4(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[12] -> IMA1.T4(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[11] -> IMA2.T4(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[10] -> IMA3.T4(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[14] -> IMA0.T1(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[13] -> IMA1.T1(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[12] -> IMA2.T1(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T1*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[11] -> IMA3.T1(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[15] -> IMA0.T2(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[14] -> IMA1.T2(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[13] -> IMA2.T2(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T2*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[12] -> IMA3.T2(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU0.T0(Mode0)|| R0: M[16] -> IMA0.T3(Mode0) || SHU0: T2+T0(S) -> SHU0.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU1.T0(Mode0)|| R1: M[15] -> IMA1.T3(Mode0) || SHU1: T2+T0(S) -> SHU1.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU2.T0(Mode0)|| R2: M[14] -> IMA2.T3(Mode0) || SHU2: T2+T0(S) -> SHU2.T2(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3:0 + T3*T0(ShiftMode0)(C)(S)(SSS)(T) ->SHU3.T0(Mode0)|| R3: M[13] -> IMA3.T3(Mode0) || SHU3: T2+T0(S) -> SHU3.T2(Mode0);
|
||||
BIU2:Load(T0) -> IMA0.T0(Mode0) || IMA0: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU0.T0(Mode0)|| R0: M[17] -> IMA0.T4(Mode0) || SHU0: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0) -> IMA1.T0(Mode0) || IMA1: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU1.T0(Mode0)|| R1: M[16] -> IMA1.T4(Mode0) || SHU1: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0) -> IMA2.T0(Mode0) || IMA2: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU2.T0(Mode0)|| R2: M[15] -> IMA2.T4(Mode0) || SHU2: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BIU2:Load(T0)(A++) -> IMA3.T0(Mode0) || IMA3: 0 + T4*T0(ShiftMode0)(C)(S)(SSS)(T) -> SHU3.T0(Mode0)|| R3: M[14] -> IMA3.T4(Mode0) || SHU3: T2+T0(S) -> BIU3.T0(Mode0) || BIU3:Store(T0,T1)(A++)(Mode0);
|
||||
BLOCK_1:
|
||||
BIU2:wait 0 || IMA0: wait 0 ||IMA1: wait 0 || IMA2: wait 0 || IMA3: wait 0 || R0: wait 0 || R1: wait 0 || R2: wait 0 || R3: wait 0 || SHU0: wait 0 || SHU1: wait 0 || SHU2: wait 0 || SHU3: wait 0 || BIU3: wait 0;
|
||||
|
||||
MFetch:REPEAT @(35);
|
||||
MFetch:MPU.STOP;
|
@ -1,414 +0,0 @@
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <Transform.h>
|
||||
#define PI 3.1415926
|
||||
#define imag(x) (x&0xffff)<<16
|
||||
#define real(x) x&0xffff
|
||||
|
||||
//factor range in [0~1]
|
||||
|
||||
void GenParam(double thita[], int* i_real,int* i_imag, int degree,int direct){
|
||||
|
||||
switch(degree){
|
||||
case(2):
|
||||
{
|
||||
double p_real[2] = {0};
|
||||
double p_imag[2] = {0};
|
||||
double G1_I[2] = { cos(thita[0]), cos(thita[0]) };
|
||||
double G1_Q[2] = { sin(thita[0]), sin(thita[0]) };
|
||||
double G2_I[2] = { cos(thita[1]),-cos(thita[1]) };
|
||||
double G2_Q[2] = { sin(thita[1]), -sin(thita[1]) };
|
||||
double I[2];
|
||||
double Q[2];
|
||||
I[0] = (G1_I[0] + G2_I[0]) / 2;
|
||||
Q[0] = (G1_Q[0] + G2_Q[0]) / 2;
|
||||
I[1] = (G1_I[1] + G2_I[1]) / 2;
|
||||
Q[1] = (G1_Q[1] + G2_Q[1]) / 2;
|
||||
for(int j = 0;j<2;j++){
|
||||
p_real[j] = I[j];
|
||||
p_imag[j] = Q[j];
|
||||
}
|
||||
//now convert double to int
|
||||
|
||||
for(int j=0; j<2; j++)
|
||||
{
|
||||
//i_real[j] = (int)(p_real[j]*16384);
|
||||
//i_imag[j] = (int)(p_imag[j]*16384);
|
||||
i_real[j] = (int)(p_real[j]*4096);
|
||||
i_imag[j] = (int)(p_imag[j]*4096);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case(4):
|
||||
{
|
||||
double p_real[4] = {0};
|
||||
double p_imag[4] = {0};
|
||||
double G1_I[4] = { cos(thita[0]), cos(thita[0]) ,cos(thita[0]), cos(thita[0])};//[1 1 1 1]
|
||||
double G1_Q[4] = { sin(thita[0]), sin(thita[0]) ,sin(thita[0]), sin(thita[0])};
|
||||
|
||||
double G2_I[4] = { cos(thita[1]),-sin(thita[1]) ,-cos(thita[1]) ,sin(thita[1]) };//[1 i -1 -i]
|
||||
double G2_Q[4] = { sin(thita[1]),cos(thita[1]) ,-sin(thita[1]) ,-cos(thita[1]) };
|
||||
|
||||
double G3_I[4] = { cos(thita[2]), -cos(thita[2]),cos(thita[2]), -cos(thita[2]) };//[1 -1 1 -1]
|
||||
double G3_Q[4] = { sin(thita[2]), -sin(thita[2]),sin(thita[2]), -sin(thita[2]) };
|
||||
|
||||
double G4_I[4] = { cos(thita[3]), sin(thita[3]), -cos(thita[3]) , -sin(thita[3]) };//[1 -i -1 i]
|
||||
double G4_Q[4] = { sin(thita[3]), -cos(thita[3]), -sin(thita[3]), cos(thita[3]) };
|
||||
double I[4];
|
||||
double Q[4];
|
||||
for(int i =0;i<4;i++){
|
||||
I[i] = (G1_I[i] + G2_I[i] + G3_I[i] + G4_I[i]) / 4;
|
||||
Q[i] = (G1_Q[i] + G2_Q[i] + G3_Q[i] + G4_Q[i]) / 4;
|
||||
}
|
||||
|
||||
if(direct == 1){
|
||||
p_imag[0] = Q[0];
|
||||
p_real[0] = I[0];
|
||||
p_imag[1] = Q[3];
|
||||
p_real[1] = I[3];
|
||||
p_imag[2] = Q[2];
|
||||
p_real[2] = I[2];
|
||||
p_imag[3] = Q[1];
|
||||
p_real[3] = I[1];
|
||||
}
|
||||
else{
|
||||
for(int j = 0;j<4;j++){
|
||||
//p_real[j] = (G1_I[j] + G2_I[j] + G3_I[j] + G4_I[j]) / 4;
|
||||
//p_imag[j] = (G1_Q[j] + G2_Q[j] + G3_Q[j] + G4_Q[j]) / 4;//conj
|
||||
p_real[j] = I[j];
|
||||
p_imag[j] = Q[j];
|
||||
}
|
||||
|
||||
}
|
||||
//now convert double to int
|
||||
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
//i_real[j] = (int)(p_real[j]*16384);
|
||||
//i_imag[j] = (int)(p_imag[j]*16384);
|
||||
i_real[j] = (int)(p_real[j]*4096);
|
||||
i_imag[j] = (int)(p_imag[j]*4096);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(8):
|
||||
{
|
||||
double p_real[8] = {0};
|
||||
double p_imag[8] = {0};
|
||||
double G1_I[4] = { cos(thita[0]), cos(thita[0]) ,cos(thita[0]), cos(thita[0])};//[1 1 1 1]
|
||||
double G1_Q[4] = { sin(thita[0]), sin(thita[0]) ,sin(thita[0]), sin(thita[0])};
|
||||
|
||||
double G2_I[4] = { cos(thita[1]),-sin(thita[1]) ,-cos(thita[1]) ,sin(thita[1]) };//[1 i -1 -i]
|
||||
double G2_Q[4] = { sin(thita[1]),cos(thita[1]) ,-sin(thita[1]) ,-cos(thita[1]) };
|
||||
|
||||
double G3_I[4] = { cos(thita[2]), -cos(thita[2]),cos(thita[2]), -cos(thita[2]) };//[1 -1 1 -1]
|
||||
double G3_Q[4] = { sin(thita[2]), -sin(thita[2]),sin(thita[2]), -sin(thita[2]) };
|
||||
|
||||
double G4_I[4] = { cos(thita[3]), sin(thita[3]), -cos(thita[3]) , -sin(thita[3]) };//[1 -i -1 i]
|
||||
double G4_Q[4] = { sin(thita[3]), -cos(thita[3]), -sin(thita[3]), cos(thita[3]) };
|
||||
double I[8];
|
||||
double Q[8];
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
I[2*j] = (G1_I[j] + G2_I[j]) / 4;
|
||||
Q[2*j] = (G1_Q[j] + G2_Q[j]) / 4;
|
||||
I[2*j+1] = (G3_I[j] + G4_I[j]) / 4;
|
||||
Q[2*j+1] = (G3_Q[j] + G4_Q[j]) / 4;
|
||||
}
|
||||
|
||||
if(direct == 1){
|
||||
p_imag[0] = Q[0];
|
||||
p_real[0] = I[0];
|
||||
|
||||
p_imag[1] = Q[7];
|
||||
p_real[1] = I[7];
|
||||
|
||||
p_imag[2] = Q[6];
|
||||
p_real[2] = I[6];
|
||||
|
||||
p_imag[3] = Q[5];
|
||||
p_real[3] = I[5];
|
||||
|
||||
p_imag[4] = Q[4];
|
||||
p_real[4] = I[4];
|
||||
|
||||
p_imag[5] = Q[3];
|
||||
p_real[5] = I[3];
|
||||
|
||||
p_imag[6] = Q[2];
|
||||
p_real[6] = I[2];
|
||||
|
||||
p_imag[7] = Q[1];
|
||||
p_real[7] = I[1];
|
||||
}
|
||||
else{
|
||||
for(int j = 0;j<8;j++){
|
||||
p_real[j] = I[j];
|
||||
p_imag[j] = Q[j];
|
||||
}
|
||||
|
||||
}
|
||||
//now convert double to int
|
||||
|
||||
for(int j=0; j<8; j++)
|
||||
{
|
||||
//i_real[j] = (int)(p_real[j]*16384);
|
||||
//i_imag[j] = (int)(p_imag[j]*16384);
|
||||
i_real[j] = (int)(p_real[j]*4096);
|
||||
i_imag[j] = (int)(p_imag[j]*4096);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void get_thita(int* current_state, double* thita)
|
||||
{
|
||||
int tmp = (current_state[0] + current_state[4]) % 2;
|
||||
for (int i = 1; i < 9; i++)
|
||||
{
|
||||
current_state[i - 1] = current_state[i];
|
||||
}
|
||||
current_state[8] = tmp;
|
||||
int* p = current_state + 9;
|
||||
tmp = (p[0] + p[2]) % 2;
|
||||
for (int i = 1; i < 11; i++)
|
||||
{
|
||||
p[i - 1] = p[i];
|
||||
}
|
||||
p[10] = tmp;
|
||||
p += 11;
|
||||
tmp = (p[0] + p[1]+p[3]+p[4]) % 2;
|
||||
for (int i = 1; i < 13; i++)
|
||||
{
|
||||
p[i - 1] = p[i];
|
||||
}
|
||||
p[12] = tmp;
|
||||
thita[0] = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
thita[0] += current_state[i] << i;
|
||||
}
|
||||
thita[0] = thita[0] / 8 * 2 * PI;
|
||||
thita[1] = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
thita[1] += current_state[i+4] << i;
|
||||
}
|
||||
thita[1] = thita[1] / 8 * 2 * PI;
|
||||
thita[2] = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
thita[2] += current_state[i + 7] << i;
|
||||
}
|
||||
thita[2] = thita[2] / 8 * 2 * PI;
|
||||
thita[3] = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
thita[3] += current_state[i + 10] << i;
|
||||
}
|
||||
thita[3] = thita[3] / 8 * 2 * PI;
|
||||
thita[4] = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
thita[4] += current_state[i + 13] << i;
|
||||
}
|
||||
thita[4] = thita[4] / 8 * 2 * PI;
|
||||
thita[5] = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
thita[4] += current_state[i + 16] << i;
|
||||
}
|
||||
thita[4] = thita[4] / 8 * 2 * PI;
|
||||
}
|
||||
|
||||
int sign_extend_16_to_32(int num)
|
||||
{
|
||||
return (num<<16)>>16;
|
||||
}
|
||||
|
||||
void Transform(int ConfigAddr, int InAddr, int OutAddr, int N, double* thita, int direct)
|
||||
{
|
||||
volatile int a;
|
||||
int *Para = (int *)ConfigAddr;
|
||||
|
||||
int i_real[8] = {0};
|
||||
int i_imag[8] = {0};
|
||||
|
||||
GenParam(thita,i_real,i_imag,N,direct);
|
||||
|
||||
switch(N)
|
||||
{
|
||||
case(2):
|
||||
{
|
||||
for(int i=0;i<2;i++){
|
||||
for(int j=0;j<16;j++){
|
||||
Para[16*(i+4) + j] = (real(i_real[i])) + (imag(i_imag[i]));
|
||||
}
|
||||
}
|
||||
for(int i=0;i<2;i++){
|
||||
//Para[i] = 1792;//3584/2
|
||||
Para[i] = 224;//14*512/(2*16)
|
||||
}
|
||||
Para[16*2 + 0] = InAddr; //KB0
|
||||
Para[16*2 + 1] = InAddr; //KB1
|
||||
Para[16*2 + 2] = InAddr; //KB2
|
||||
Para[16*2 + 3] = InAddr; //KB3
|
||||
//Para[16*2 + 4] = 114688; //KS0
|
||||
Para[16*2 + 4] = 14336; //KS0 7*512*32/8
|
||||
//Para[16*2 + 5] = 16384; //KS1
|
||||
Para[16*2 + 5] = 2048; //KS1 512*32/8
|
||||
Para[16*2 + 6] = 64; //KS2
|
||||
Para[16*2 + 7] = 0; //KS3
|
||||
Para[16*2 + 8] = (2<<16) + 2; //KC0 KI0
|
||||
Para[16*2 + 9] = (7<<16) + 7; //KC1 KI1
|
||||
//Para[16*2 + 10] = (256<<16) + 256; //KC2 KI2
|
||||
Para[16*2 + 10] = (32<<16) + 32; //KC2 KI2 512/16
|
||||
|
||||
Para[16*3 + 0] = OutAddr; //KB0
|
||||
Para[16*3 + 1] = OutAddr; //KB1
|
||||
Para[16*3 + 2] = OutAddr; //KB2
|
||||
Para[16*3 + 4] = 14336; //KS0
|
||||
Para[16*3 + 5] = 2048; //KS1
|
||||
Para[16*3 + 6] = 64; //KS2
|
||||
Para[16*3 + 8] = (2<<16) + 2; //KC0 KI0
|
||||
Para[16*3 + 9] = (7<<16) + 7; //KC1 KI1
|
||||
Para[16*3 + 10] = (32<<16) + 32; //KC2 KI2
|
||||
break;
|
||||
}
|
||||
case(4):
|
||||
{
|
||||
for(int i=0;i<4;i++){
|
||||
for(int j=0;j<16;j++){
|
||||
Para[16*(i+4) + j] = (real(i_real[i])) + (imag(i_imag[i]));
|
||||
}
|
||||
}
|
||||
for(int i=0;i<4;i++){
|
||||
//Para[i] = 896;//3584/4
|
||||
Para[i] = 128;//4096*2/(4*16)
|
||||
}
|
||||
Para[16*2 + 0] = InAddr; //KB0
|
||||
Para[16*2 + 1] = InAddr; //KB1
|
||||
Para[16*2 + 2] = InAddr; //KB2
|
||||
Para[16*2 + 3] = InAddr; //KB3
|
||||
Para[16*2 + 4] = 4096; //KS0
|
||||
Para[16*2 + 5] = 64; //KS1
|
||||
Para[16*2 + 6] = 16384; //KS2
|
||||
Para[16*2 + 7] = 0; //KS3
|
||||
Para[16*2 + 8] = (4<<16) + 4; //KC0 KI0
|
||||
Para[16*2 + 9] = (64<<16) + 64; //KC1 KI1
|
||||
//Para[16*2 + 10] = (14<<16) + 14; //KC2 KI2
|
||||
Para[16*2 + 10] = (2<<16) + 2; //KC2 KI2 change to 2 one time handle 2 row
|
||||
|
||||
Para[16*3 + 0] = OutAddr; //KB0
|
||||
Para[16*3 + 1] = OutAddr; //KB1
|
||||
Para[16*3 + 2] = OutAddr; //KB2
|
||||
Para[16*3 + 4] = 4096; //KS0
|
||||
Para[16*3 + 5] = 64; //KS1
|
||||
Para[16*3 + 6] = 16384; //KS2
|
||||
Para[16*3 + 8] = (4<<16) + 4; //KC0 KI0
|
||||
Para[16*3 + 9] = (64<<16) + 64; //KC1 KI1
|
||||
//Para[16*3 + 10] = (14<<16) + 14; //KC2 KI2
|
||||
Para[16*3 + 10] = (2<<16) + 2; //KC2 KI2
|
||||
break;
|
||||
}
|
||||
case(8):
|
||||
{
|
||||
for(int i=0;i<N;i++){
|
||||
for(int j=0;j<16;j++){
|
||||
Para[16*(i+4) + j] = (real(i_real[i])) + (imag(i_imag[i]));
|
||||
}
|
||||
}
|
||||
for(int i=0;i<N;i++){
|
||||
Para[i] = 8;//64/8
|
||||
}
|
||||
|
||||
Para[16*2 + 0] = InAddr; //KB0
|
||||
Para[16*2 + 1] = InAddr; //KB1
|
||||
Para[16*2 + 2] = InAddr; //KB2
|
||||
Para[16*2 + 3] = InAddr; //KB3
|
||||
Para[16*2 + 4] = 512; //KS0
|
||||
Para[16*2 + 5] = 64; //KS1
|
||||
Para[16*2 + 6] = 0; //KS2
|
||||
//Para[16*2 + 7] = 0; //KS3
|
||||
Para[16*2 + 8] = (8<<16) + 8; //KC0 KI0
|
||||
Para[16*2 + 9] = (8<<16) + 8; //KC1 KI1
|
||||
Para[16*2 + 10] = (8<<16) + 8; //KC2 KI2
|
||||
|
||||
Para[16*3 + 0] = OutAddr; //KB0
|
||||
Para[16*3 + 1] = OutAddr; //KB1
|
||||
Para[16*3 + 2] = OutAddr; //KB2
|
||||
Para[16*3 + 4] = 512; //KS0
|
||||
Para[16*3 + 5] = 64; //KS1
|
||||
Para[16*3 + 6] = 2048; //KS2
|
||||
Para[16*3 + 8] = (4<<16) + 4; //KC0 KI0
|
||||
Para[16*3 + 9] = (8<<16) + 8; //KC1 KI1
|
||||
Para[16*3 + 10] = (2<<16) + 2; //KC2 KI2
|
||||
|
||||
/*
|
||||
Para[16*3 + 0] = OutAddr; //KB0
|
||||
Para[16*3 + 1] = OutAddr; //KB1
|
||||
Para[16*3 + 2] = OutAddr; //KB2
|
||||
Para[16*3 + 4] = 64; //KS0
|
||||
Para[16*3 + 5] = 512; //KS1
|
||||
//Para[16*3 + 6] = 0; //KS2
|
||||
Para[16*3 + 8] = (8<<16) + 8; //KC0 KI0
|
||||
Para[16*3 + 9] = (8<<16) + 8; //KC1 KI1
|
||||
//Para[16*3 + 10] = 0; //KC2 KI2
|
||||
*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RowCopy(int* Matrix,int* Block,int idx,int direct)
|
||||
{
|
||||
int RowOffset = 4096*2;
|
||||
//idx from 0 to 6
|
||||
int BaseAddr = RowOffset*idx;
|
||||
if(direct == 1)
|
||||
{
|
||||
//load data from Matrix
|
||||
for(int i = BaseAddr;i<BaseAddr+RowOffset;i++)
|
||||
{
|
||||
Block[i-BaseAddr] = Matrix[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//store data to Matrix
|
||||
for(int i = BaseAddr;i<BaseAddr+RowOffset;i++)
|
||||
{
|
||||
Matrix[i] = Block[i-BaseAddr];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ColCopy(int* Matrix,int* Block,int idx,int direct)
|
||||
{
|
||||
int ColOffset = 512;
|
||||
int RowOffset = 4096;
|
||||
int BaseAddr = idx*ColOffset;
|
||||
|
||||
if(direct == 1)
|
||||
{
|
||||
for(int i = 0;i<14;i++){
|
||||
for(int j = 0;j<ColOffset;j++)
|
||||
{
|
||||
Block[j+i*ColOffset] = Matrix[BaseAddr+i*RowOffset+j];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int i = 0;i<14;i++){
|
||||
for(int j = 0;j<ColOffset;j++)
|
||||
{
|
||||
Matrix[BaseAddr+i*RowOffset+j] = Block[j+i*ColOffset];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
#include "ucps2.h"
|
||||
|
||||
#include <ucp2_utils.h>
|
||||
|
||||
#define MAX_SIZE 256
|
||||
__DM0 char RESULT[MAX_SIZE];
|
||||
|
||||
// Write to RESULT in DM0
|
||||
void write_to_dm0(char* src, unsigned int size)
|
||||
{
|
||||
size = (size > MAX_SIZE) ? MAX_SIZE : size;
|
||||
for (unsigned int i = 0; i < size; i++) {
|
||||
RESULT[i] = src[i];
|
||||
}
|
||||
}
|
||||
|
||||
void print_string(char *string)
|
||||
{
|
||||
unsigned int i = 0;
|
||||
while (string[i] != 0) {
|
||||
print_char(string[i]);
|
||||
i++;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// print one char
|
||||
void print_char(unsigned char src)
|
||||
{
|
||||
char * ptr = (char *)0xffffffff; // Temporary simulator output address
|
||||
*ptr = src;
|
||||
return;
|
||||
}
|
||||
|
||||
void print_int(unsigned int src)
|
||||
{
|
||||
unsigned int * ptr = (unsigned int *)0xfffffff8; // Temporary simulator output address
|
||||
*ptr = src;
|
||||
return;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user