mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
Clock frequency detection
This commit is contained in:
parent
4d754dbb33
commit
f6f42293d1
10 changed files with 25 additions and 11 deletions
|
@ -16,17 +16,21 @@ def encode_version(version):
|
||||||
return r
|
return r
|
||||||
|
|
||||||
class Identifier:
|
class Identifier:
|
||||||
def __init__(self, address, sysid, version):
|
def __init__(self, address, sysid, version, frequency):
|
||||||
self.sysid = sysid
|
self.sysid = sysid
|
||||||
self.version = encode_version(version)
|
self.version = encode_version(version)
|
||||||
|
self.frequency = frequency
|
||||||
|
|
||||||
self._r_sysid = RegisterField("sysid", 16, access_bus=READ_ONLY, access_dev=WRITE_ONLY)
|
self._r_sysid = RegisterField("sysid", 16, access_bus=READ_ONLY, access_dev=WRITE_ONLY)
|
||||||
self._r_version = RegisterField("version", 16, access_bus=READ_ONLY, access_dev=WRITE_ONLY)
|
self._r_version = RegisterField("version", 16, access_bus=READ_ONLY, access_dev=WRITE_ONLY)
|
||||||
self.bank = csrgen.Bank([self._r_sysid, self._r_version], address=address)
|
self._r_frequency = RegisterField("frequency", 32, access_bus=READ_ONLY, access_dev=WRITE_ONLY)
|
||||||
|
regs = [self._r_sysid, self._r_version, self._r_frequency]
|
||||||
|
self.bank = csrgen.Bank(regs, address=address)
|
||||||
|
|
||||||
def get_fragment(self):
|
def get_fragment(self):
|
||||||
comb = [
|
comb = [
|
||||||
self._r_sysid.field.w.eq(self.sysid),
|
self._r_sysid.field.w.eq(self.sysid),
|
||||||
self._r_version.field.w.eq(self.version)
|
self._r_version.field.w.eq(self.version),
|
||||||
|
self._r_frequency.field.w.eq(self.frequency)
|
||||||
]
|
]
|
||||||
return self.bank.get_fragment() + Fragment(comb)
|
return self.bank.get_fragment() + Fragment(comb)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
M2DIR=../..
|
M2DIR=../..
|
||||||
include $(M2DIR)/software/include.mak
|
include $(M2DIR)/software/include.mak
|
||||||
|
|
||||||
OBJECTS=crt0.o isr.o ddrinit.o timer.o main.o microudp.o tftp.o boot-helper.o boot.o
|
OBJECTS=crt0.o isr.o ddrinit.o main.o microudp.o tftp.o boot-helper.o boot.o
|
||||||
|
|
||||||
all: bios.bin
|
all: bios.bin
|
||||||
|
|
||||||
|
|
|
@ -24,11 +24,11 @@
|
||||||
#include <sfl.h>
|
#include <sfl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <irq.h>
|
#include <irq.h>
|
||||||
|
#include <timer.h>
|
||||||
|
|
||||||
#include <hw/flash.h>
|
#include <hw/flash.h>
|
||||||
#include <hw/mem.h>
|
#include <hw/mem.h>
|
||||||
|
|
||||||
#include "timer.h"
|
|
||||||
#include "microudp.h"
|
#include "microudp.h"
|
||||||
#include "tftp.h"
|
#include "tftp.h"
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
|
|
|
@ -24,12 +24,12 @@
|
||||||
#include <irq.h>
|
#include <irq.h>
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
#include <extra/crc.h>
|
#include <extra/crc.h>
|
||||||
|
#include <timer.h>
|
||||||
|
|
||||||
#include <hw/flash.h>
|
#include <hw/flash.h>
|
||||||
#include <hw/minimac.h>
|
#include <hw/minimac.h>
|
||||||
|
|
||||||
#include "ddrinit.h"
|
#include "ddrinit.h"
|
||||||
#include "timer.h"
|
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
#define CSR_ID_SYSTEMH ID_CSR(0x00)
|
#define CSR_ID_SYSTEMH ID_CSR(0x00)
|
||||||
#define CSR_ID_SYSTEML ID_CSR(0x04)
|
#define CSR_ID_SYSTEML ID_CSR(0x04)
|
||||||
#define CSR_ID_VERSIONH ID_CSR(0x08)
|
#define CSR_ID_VERSIONH ID_CSR(0x08)
|
||||||
#define CSR_ID_VERSIONL ID_CSR(0x0c)
|
#define CSR_ID_VERSIONL ID_CSR(0x0C)
|
||||||
|
#define CSR_ID_FREQ3 ID_CSR(0x10)
|
||||||
|
#define CSR_ID_FREQ2 ID_CSR(0x14)
|
||||||
|
#define CSR_ID_FREQ1 ID_CSR(0x18)
|
||||||
|
#define CSR_ID_FREQ0 ID_CSR(0x1C)
|
||||||
|
|
||||||
#endif /* __HW_ID_H */
|
#endif /* __HW_ID_H */
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
M2DIR=../..
|
M2DIR=../..
|
||||||
include $(M2DIR)/software/include.mak
|
include $(M2DIR)/software/include.mak
|
||||||
|
|
||||||
OBJECTS=divsi3.o libc.o console.o system.o board.o uart.o softfloat.o softfloat-glue.o vsnprintf.o atof.o
|
OBJECTS=divsi3.o libc.o console.o timer.o system.o board.o uart.o softfloat.o softfloat-glue.o vsnprintf.o atof.o
|
||||||
|
|
||||||
all: libbase.a
|
all: libbase.a
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
|
#include <timer.h>
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
|
|
||||||
static const struct board_desc boards[1] = {
|
static const struct board_desc boards[1] = {
|
||||||
|
@ -106,7 +107,8 @@ void board_init(void)
|
||||||
}
|
}
|
||||||
rev = get_pcb_revision();
|
rev = get_pcb_revision();
|
||||||
get_soc_version_formatted(soc_version);
|
get_soc_version_formatted(soc_version);
|
||||||
printf("Detected SoC %s on %s (PCB revision %d)\n", soc_version, brd_desc->name, rev);
|
printf("Detected SoC %s at %dMHz on %s (PCB revision %d)\n", soc_version, get_system_frequency()/1000000,
|
||||||
|
brd_desc->name, rev);
|
||||||
if(strcmp(soc_version, VERSION) != 0)
|
if(strcmp(soc_version, VERSION) != 0)
|
||||||
printf("SoC and BIOS versions do not match!\n");
|
printf("SoC and BIOS versions do not match!\n");
|
||||||
if(rev > 2)
|
if(rev > 2)
|
||||||
|
|
|
@ -16,12 +16,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <hw/timer.h>
|
#include <hw/timer.h>
|
||||||
|
#include <hw/id.h>
|
||||||
|
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
unsigned int get_system_frequency(void)
|
unsigned int get_system_frequency(void)
|
||||||
{
|
{
|
||||||
return 83333333; /* TODO */
|
return (CSR_ID_FREQ3 << 24)
|
||||||
|
|(CSR_ID_FREQ2 << 16)
|
||||||
|
|(CSR_ID_FREQ1 << 8)
|
||||||
|
|CSR_ID_FREQ0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void timer_enable(int en)
|
void timer_enable(int en)
|
2
top.py
2
top.py
|
@ -120,7 +120,7 @@ def get():
|
||||||
# CSR
|
# CSR
|
||||||
#
|
#
|
||||||
uart0 = uart.UART(csr_offset("UART"), clk_freq, baud=115200)
|
uart0 = uart.UART(csr_offset("UART"), clk_freq, baud=115200)
|
||||||
identifier0 = identifier.Identifier(csr_offset("ID"), 0x4D31, version)
|
identifier0 = identifier.Identifier(csr_offset("ID"), 0x4D31, version, int(clk_freq))
|
||||||
timer0 = timer.Timer(csr_offset("TIMER0"))
|
timer0 = timer.Timer(csr_offset("TIMER0"))
|
||||||
csrcon0 = csr.Interconnect(wishbone2csr0.csr, [
|
csrcon0 = csr.Interconnect(wishbone2csr0.csr, [
|
||||||
uart0.bank.interface,
|
uart0.bank.interface,
|
||||||
|
|
Loading…
Reference in a new issue