FPGA BRAM working

This commit is contained in:
mikelam 2022-01-15 15:54:47 +08:00
parent 900c0e292f
commit 5d1c7c4d51
8 changed files with 7991 additions and 7983 deletions

File diff suppressed because it is too large Load Diff

View File

@ -135,10 +135,14 @@ void Error_Handler(void);
#define FSMC_D2_GPIO_Port GPIOD #define FSMC_D2_GPIO_Port GPIOD
#define FSMC_D3_Pin GPIO_PIN_1 #define FSMC_D3_Pin GPIO_PIN_1
#define FSMC_D3_GPIO_Port GPIOD #define FSMC_D3_GPIO_Port GPIOD
#define FSMC_CLK_Pin GPIO_PIN_3
#define FSMC_CLK_GPIO_Port GPIOD
#define FSMC_NOE_Pin GPIO_PIN_4 #define FSMC_NOE_Pin GPIO_PIN_4
#define FSMC_NOE_GPIO_Port GPIOD #define FSMC_NOE_GPIO_Port GPIOD
#define FSMC_NWE_Pin GPIO_PIN_5 #define FSMC_NWE_Pin GPIO_PIN_5
#define FSMC_NWE_GPIO_Port GPIOD #define FSMC_NWE_GPIO_Port GPIOD
#define FSMC_NWAIT_Pin GPIO_PIN_6
#define FSMC_NWAIT_GPIO_Port GPIOD
#define FSMC_NE1_Pin GPIO_PIN_7 #define FSMC_NE1_Pin GPIO_PIN_7
#define FSMC_NE1_GPIO_Port GPIOD #define FSMC_NE1_GPIO_Port GPIOD
#define EEM_POWER_SW_Pin GPIO_PIN_6 #define EEM_POWER_SW_Pin GPIO_PIN_6

View File

@ -1,6 +1,6 @@
#include "user_main.h" #include "user_main.h"
#define ADC_SAMPLE_NUM 100 #define ADC_SAMPLE_NUM 16384
uint8_t fsmc_read_buf, fsmc_write_buf; uint8_t fsmc_read_buf, fsmc_write_buf;
int8_t adc_result[ADC_SAMPLE_NUM]; int8_t adc_result[ADC_SAMPLE_NUM];
@ -27,8 +27,9 @@ void user_loop()
fsmc_write_buf = (dio_io & 0x01) | ((dio_ch & 0x03) << 1) | 0x10; fsmc_write_buf = (dio_io & 0x01) | ((dio_ch & 0x03) << 1) | 0x10;
fsmc_write(fsmc_write_buf, 0); fsmc_write(fsmc_write_buf, 0);
} }
fsmc_read(0xffff, (uint8_t*)&fsmc_read_buf); // fsmc_read(0xffff, (uint8_t*)&fsmc_read_buf);
if (fsmc_read_buf & 0x02) // if (fsmc_read_buf & 0x02)
if (HAL_GPIO_ReadPin(FSMC_NWAIT_GPIO_Port, FSMC_NWAIT_Pin) == GPIO_PIN_SET)
{ {
fsmc_write_buf = (dio_io & 0x01) | ((dio_ch & 0x03) << 1); fsmc_write_buf = (dio_io & 0x01) | ((dio_ch & 0x03) << 1);
fsmc_write(fsmc_write_buf, 0); fsmc_write(fsmc_write_buf, 0);

View File

@ -172,6 +172,12 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SPI_FPGA_CS_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(SPI_FPGA_CS_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : PDPin PDPin */
GPIO_InitStruct.Pin = FSMC_CLK_Pin|FSMC_NWAIT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = EEM_POWER_SW_Pin; GPIO_InitStruct.Pin = EEM_POWER_SW_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

View File

@ -1,45 +1,26 @@
module top ( module top (
CLK_25M, input CLK_25M,
LED, input KEY,
KEY, output LED,
DIO_OUT,
DIO_IO_SEL, input FSMC_NL,
DIO_CH_SEL, input FSMC_NOE,
ADC_CLK, input FSMC_NWE,
ADC_DAT, input FSMC_NE1,
FSMC_CLK, input [15:0]FSMC_ADD,
FSMC_ADD, inout [7:0]FSMC_DAT,
FSMC_DAT, input [1:0]FSMC_NBL,
FSMC_NL, inout FSMC_CLK,
FSMC_NWAIT, inout FSMC_NWAIT,
FSMC_NOE,
FSMC_NWE, output ADC_CLK,
FSMC_NBL, input [7:0]ADC_DAT,
FSMC_NE1
output DIO_OUT,
output DIO_IO_SEL,
output [2:0]DIO_CH_SEL,
); );
/* I/O */
input CLK_25M;
input KEY;
output LED;
input FSMC_NL;
input FSMC_NOE;
input FSMC_NWE;
input FSMC_NE1;
input [15:0]FSMC_ADD;
inout [7:0]FSMC_DAT;
input [1:0]FSMC_NBL;
input FSMC_CLK;
input FSMC_NWAIT;
output ADC_CLK;
input [7:0]ADC_DAT;
output DIO_OUT;
output DIO_IO_SEL;
output [2:0]DIO_CH_SEL;
/* Counter register */ /* Counter register */
reg [31:0] counter = 32'b0; reg [31:0] counter = 32'b0;
/* LED drivers */ /* LED drivers */
@ -67,11 +48,11 @@ module top (
.BYPASS(1'b0) .BYPASS(1'b0)
); );
parameter ADC_RAM_DEPTH = 16384;
/* high-speed ADC */ /* high-speed ADC */
assign ADC_CLK = CLK_50M; assign ADC_CLK = CLK_50M;
reg [7:0] adc_buf = 8'b0; reg [7:0] adc_buf = 8'b0;
reg [7:0] adc_ram [100]; reg [7:0] adc_ram [0:ADC_RAM_DEPTH-1];
reg [15:0] ram_pointer = 0; reg [15:0] ram_pointer = 0;
reg [7:0] adc_status = 8'h00; //0:idle or sampling; 1: data available reg [7:0] adc_status = 8'h00; //0:idle or sampling; 1: data available
always @ (posedge ADC_CLK) begin always @ (posedge ADC_CLK) begin
@ -79,7 +60,7 @@ module top (
adc_buf = ADC_DAT; adc_buf = ADC_DAT;
adc_buf[7] = ~adc_buf[7]; adc_buf[7] = ~adc_buf[7];
adc_ram[ram_pointer] = adc_buf; adc_ram[ram_pointer] = adc_buf;
if (ram_pointer < 100) begin if (ram_pointer < ADC_RAM_DEPTH) begin
adc_status[1] = 1'b0; adc_status[1] = 1'b0;
ram_pointer++; ram_pointer++;
end end
@ -95,9 +76,9 @@ module top (
wire FSMC_RE = ~FSMC_NOE & ~FSMC_NE1; wire FSMC_RE = ~FSMC_NOE & ~FSMC_NE1;
always @ (posedge FSMC_RE) begin //read from FPGA always @ (posedge FSMC_RE) begin //read from FPGA
if (FSMC_ADD == 16'hffff) // if (FSMC_ADD == 16'hffff)
FSMC_DAT <= adc_status; // FSMC_DAT <= adc_status;
else // else
FSMC_DAT <= adc_ram[FSMC_ADD]; FSMC_DAT <= adc_ram[FSMC_ADD];
end end
@ -111,6 +92,8 @@ module top (
end end
// assign FSMC_DAT = FSMC_RE ? fsmc_buf : 8'hzz; // assign FSMC_DAT = FSMC_RE ? fsmc_buf : 8'hzz;
assign FSMC_CLK = adc_status[0];
assign FSMC_NWAIT = adc_status[1];
assign LED = adc_status[1]; assign LED = adc_status[1];
endmodule endmodule

View File

@ -1,5 +1,5 @@
########################################################################################################################## ##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.15.2] date: [Sun Jan 09 16:58:14 HKT 2022] # File automatically-generated by tool: [projectgenerator] version: [3.15.2] date: [Sat Jan 15 15:39:31 HKT 2022]
########################################################################################################################## ##########################################################################################################################
# ------------------------------------------------ # ------------------------------------------------

View File

@ -1,30 +1,32 @@
OpenDocument="fpga.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Core/Src/User/fpga.c", Line=43 OpenDocument="fpga.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Core/Src/User/fpga.c", Line=43
OpenDocument="main.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Core/Src/main.c", Line=64 OpenDocument="main.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Core/Src/main.c", Line=63
OpenDocument="stm32f1xx_hal.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c", Line=372 OpenDocument="stm32f1xx_hal.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c", Line=372
OpenDocument="stm32f1xx_it.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Core/Src/stm32f1xx_it.c", Line=79 OpenDocument="stm32f1xx_it.c", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/Core/Src/stm32f1xx_it.c", Line=79
OpenDocument="startup_stm32f103xg.s", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/startup_stm32f103xg.s", Line=56 OpenDocument="startup_stm32f103xg.s", FilePath="/home/geekzjk/Desktop/Syrostan-MCU-C/startup_stm32f103xg.s", Line=56
OpenToolbar="Debug", Floating=0, x=0, y=0 OpenToolbar="Debug", Floating=0, x=0, y=0
OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=0, w=300, h=629, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1 OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=0, w=300, h=629, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1
OpenWindow="Memory 1", DockArea=BOTTOM, x=3, y=0, w=162, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0xFC OpenWindow="Memory 1", DockArea=BOTTOM, x=3, y=0, w=162, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0xFC
OpenWindow="Watched Data 1", DockArea=LEFT, x=0, y=1, w=484, h=363, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Watched Data 1", DockArea=LEFT, x=0, y=1, w=484, h=520, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
OpenWindow="Functions", DockArea=LEFT, x=0, y=0, w=484, h=265, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Functions", DockArea=LEFT, x=0, y=0, w=484, h=108, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
OpenWindow="Data Sampling", DockArea=BOTTOM, x=1, y=0, w=470, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0 OpenWindow="Data Sampling", DockArea=BOTTOM, x=1, y=0, w=470, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0
OpenWindow="Timeline", DockArea=BOTTOM, x=2, y=0, w=916, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=1, CodePaneShown=1, PinCursor="Cursor Movable", TimePerDiv="50 ms / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="697;0", PowerGraphDrawAsPoints=0, PowerGraphLegendShown=1, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="733;0", CodeGraphLegendShown=1, CodeGraphLegendPosition="749;0" OpenWindow="Timeline", DockArea=BOTTOM, x=2, y=0, w=916, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=1, CodePaneShown=1, PinCursor="Cursor Movable", TimePerDiv="50 ms / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="697;0", PowerGraphDrawAsPoints=0, PowerGraphLegendShown=1, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="734;1", CodeGraphLegendShown=1, CodeGraphLegendPosition="750;0"
OpenWindow="Console", DockArea=BOTTOM, x=0, y=0, w=369, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Console", DockArea=BOTTOM, x=0, y=0, w=369, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
TableHeader="Functions", SortCol="Name", SortOrder="DESCENDING", VisibleCols=["Name";"Address";"Size";"#Insts";"Source"], ColWidths=[1183;100;100;100;203] TableHeader="Functions", SortCol="Name", SortOrder="DESCENDING", VisibleCols=["Name";"Address";"Size";"#Insts";"Source"], ColWidths=[1183;100;100;100;203]
TableHeader="Data Sampling Table", SortCol="Index", SortOrder="ASCENDING", VisibleCols=["Index";"Time"], ColWidths=[100;100]
TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[100;100;100;100;100;100;100;100;100]
TableHeader="Power Sampling", SortCol="Index", SortOrder="ASCENDING", VisibleCols=["Index";"Time";"Ch 0"], ColWidths=[100;100;100] TableHeader="Power Sampling", SortCol="Index", SortOrder="ASCENDING", VisibleCols=["Index";"Time";"Ch 0"], ColWidths=[100;100;100]
TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[100;105;259] TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[100;105;259]
TableHeader="Watched Data 1", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Value";"Location";"Refresh"], ColWidths=[133;144;100;100]
TableHeader="RegisterSelectionDialog", SortCol="None", SortOrder="ASCENDING", VisibleCols=[], ColWidths=[] TableHeader="RegisterSelectionDialog", SortCol="None", SortOrder="ASCENDING", VisibleCols=[], ColWidths=[]
TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[200;100;100;358] TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[200;100;100;358]
TableHeader="Watched Data 1", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Value";"Location";"Refresh"], ColWidths=[133;144;100;107]
TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time"], ColWidths=[100;100]
TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[100;100;100;100;100;100;100;100;100]
WatchedExpression="spi_test_data", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1 WatchedExpression="spi_test_data", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="enc_mac_address", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1 WatchedExpression="enc_mac_address", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="voltages", RefreshRate=5, Window=Watched Data 1 WatchedExpression="voltages", RefreshRate=5, Window=Watched Data 1
WatchedExpression="eem_current", RefreshRate=5, Window=Watched Data 1 WatchedExpression="eem_current", RefreshRate=5, Window=Watched Data 1
WatchedExpression="fsmc_buf", RefreshRate=5, Window=Watched Data 1
WatchedExpression="i", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_BINARY, Window=Watched Data 1
WatchedExpression="dio_ch", RefreshRate=5, Window=Watched Data 1 WatchedExpression="dio_ch", RefreshRate=5, Window=Watched Data 1
WatchedExpression="dio_io", RefreshRate=5, Window=Watched Data 1 WatchedExpression="dio_io", RefreshRate=5, Window=Watched Data 1
WatchedExpression="fsmc_read_buf", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_BINARY, Window=Watched Data 1
WatchedExpression="fsmc_write_buf", RefreshRate=5, Window=Watched Data 1
WatchedExpression="adc_sample", RefreshRate=5, Window=Watched Data 1
WatchedExpression="adc_result", RefreshRate=5, Window=Watched Data 1

View File

@ -122,22 +122,24 @@ Mcu.Pin57=PC11
Mcu.Pin58=PD0 Mcu.Pin58=PD0
Mcu.Pin59=PD1 Mcu.Pin59=PD1
Mcu.Pin6=OSC_IN Mcu.Pin6=OSC_IN
Mcu.Pin60=PD4 Mcu.Pin60=PD3
Mcu.Pin61=PD5 Mcu.Pin61=PD4
Mcu.Pin62=PD7 Mcu.Pin62=PD5
Mcu.Pin63=PB3 Mcu.Pin63=PD6
Mcu.Pin64=PB4 Mcu.Pin64=PD7
Mcu.Pin65=PB5 Mcu.Pin65=PB3
Mcu.Pin66=PB6 Mcu.Pin66=PB4
Mcu.Pin67=PB8 Mcu.Pin67=PB5
Mcu.Pin68=PB9 Mcu.Pin68=PB6
Mcu.Pin69=VP_SYS_VS_Systick Mcu.Pin69=PB8
Mcu.Pin7=OSC_OUT Mcu.Pin7=OSC_OUT
Mcu.Pin70=VP_TIM3_VS_ClockSourceINT Mcu.Pin70=PB9
Mcu.Pin71=VP_TIM4_VS_ClockSourceINT Mcu.Pin71=VP_SYS_VS_Systick
Mcu.Pin72=VP_TIM3_VS_ClockSourceINT
Mcu.Pin73=VP_TIM4_VS_ClockSourceINT
Mcu.Pin8=PC0 Mcu.Pin8=PC0
Mcu.Pin9=PC1 Mcu.Pin9=PC1
Mcu.PinsNb=72 Mcu.PinsNb=74
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F103VFTx Mcu.UserName=STM32F103VFTx
@ -336,6 +338,11 @@ PD15.GPIOParameters=GPIO_Label
PD15.GPIO_Label=FSMC_D1 PD15.GPIO_Label=FSMC_D1
PD15.Locked=true PD15.Locked=true
PD15.Signal=GPIO_Output PD15.Signal=GPIO_Output
PD3.GPIOParameters=GPIO_PuPd,GPIO_Label
PD3.GPIO_Label=FSMC_CLK
PD3.GPIO_PuPd=GPIO_PULLUP
PD3.Locked=true
PD3.Signal=GPIO_Input
PD4.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP PD4.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
PD4.GPIO_Label=FSMC_NOE PD4.GPIO_Label=FSMC_NOE
PD4.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP PD4.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
@ -352,6 +359,11 @@ PD5.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PD5.Locked=true PD5.Locked=true
PD5.PinState=GPIO_PIN_SET PD5.PinState=GPIO_PIN_SET
PD5.Signal=GPIO_Output PD5.Signal=GPIO_Output
PD6.GPIOParameters=GPIO_PuPd,GPIO_Label
PD6.GPIO_Label=FSMC_NWAIT
PD6.GPIO_PuPd=GPIO_PULLUP
PD6.Locked=true
PD6.Signal=GPIO_Input
PD7.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP PD7.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
PD7.GPIO_Label=FSMC_NE1 PD7.GPIO_Label=FSMC_NE1
PD7.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP PD7.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP