mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-04 22:32:36 +00:00
feat: add audio clock signals to RCU and Retrosoc ASIC, and implement related tests
This commit is contained in:
6 files changed
+35
-3
No files matched your search
@@ -1,2 +1,2 @@
|
||||
APP_SRCS += $(ROOT_PATH)/app/network/userip/src/user_ip_demo.c
|
||||
APP_INC_DIRS += $(ROOT_PATH)/app/network/userip/include
|
||||
APP_INC_DIRS += $(ROOT_PATH)/app/network/userip/include
|
||||
@@ -213,4 +213,4 @@ firmware: $(FIRMWARE_ELF)
|
||||
|
||||
firmware asm: | manifest
|
||||
|
||||
.PHONY: FORCE_VERSION
|
||||
.PHONY: FORCE_VERSION
|
||||
@@ -22,6 +22,7 @@ module rcu #(
|
||||
pll_ctrl_if.rcu pll_ctrl,
|
||||
output logic sys_clk_o,
|
||||
output logic sys_rst_n_o,
|
||||
output logic aud_clk_o,
|
||||
output logic aud_rst_n_o,
|
||||
output logic sys_clkdiv4_o,
|
||||
output logic timebase_tick_o
|
||||
@@ -190,6 +191,7 @@ module rcu #(
|
||||
);
|
||||
|
||||
assign sys_rst_n_o = s_sys_rst_n_sync;
|
||||
assign aud_clk_o = s_aud_clk_buf;
|
||||
assign aud_rst_n_o = s_aud_rst_n_sync;
|
||||
assign sys_clkdiv4_o = s_sys_clkdiv4_q;
|
||||
assign s_sys_reset_source_n = ext_rst_n_i && !wdg_reset_req_i;
|
||||
|
||||
@@ -58,6 +58,7 @@ module retrosoc_asic (
|
||||
);
|
||||
logic s_ext_clk;
|
||||
logic s_aud_clk;
|
||||
logic s_aud_clk_buf;
|
||||
logic s_sys_clkdiv4;
|
||||
logic s_timebase_tick;
|
||||
`ifdef HAVE_PLL
|
||||
@@ -105,6 +106,7 @@ rcu #(
|
||||
.pll_ctrl (u_pll_ctrl_if),
|
||||
.sys_clk_o (s_sys_clk),
|
||||
.sys_rst_n_o (s_sys_rst_n),
|
||||
.aud_clk_o (s_aud_clk_buf),
|
||||
.aud_rst_n_o (s_aud_rst_n),
|
||||
.sys_clkdiv4_o (s_sys_clkdiv4),
|
||||
.timebase_tick_o(s_timebase_tick)
|
||||
@@ -120,7 +122,7 @@ rcu #(
|
||||
retrosoc u_retrosoc (
|
||||
.clk_i (s_sys_clk),
|
||||
.rst_n_i (s_sys_rst_n),
|
||||
.clk_aud_i (s_aud_clk),
|
||||
.clk_aud_i (s_aud_clk_buf),
|
||||
.rst_aud_n_i (s_aud_rst_n),
|
||||
.clkdiv4_i (s_sys_clkdiv4),
|
||||
.timebase_tick_i(s_timebase_tick),
|
||||
|
||||
@@ -12,6 +12,7 @@ module pll_ctrl_tb;
|
||||
logic fault_reserved_i = 1'b0;
|
||||
logic sys_clk_o;
|
||||
logic sys_rst_n_o;
|
||||
logic aud_clk_o;
|
||||
logic aud_rst_n_o;
|
||||
logic sys_clkdiv4_o;
|
||||
apb4_if apb4 (
|
||||
@@ -39,6 +40,7 @@ module pll_ctrl_tb;
|
||||
.pll_ctrl (pll_ctrl),
|
||||
.sys_clk_o (sys_clk_o),
|
||||
.sys_rst_n_o (sys_rst_n_o),
|
||||
.aud_clk_o (aud_clk_o),
|
||||
.aud_rst_n_o (aud_rst_n_o),
|
||||
.sys_clkdiv4_o (sys_clkdiv4_o),
|
||||
.timebase_tick_o()
|
||||
@@ -128,6 +130,18 @@ module pll_ctrl_tb;
|
||||
sysctrl.rtc_wake_i = 1'b0;
|
||||
#100;
|
||||
rst_n_i = 1'b1;
|
||||
repeat (2) begin
|
||||
@(posedge aud_clk_i);
|
||||
#1;
|
||||
if (aud_clk_o !== 1'b1) begin
|
||||
$fatal(1, "buffered audio clock did not follow a rising edge");
|
||||
end
|
||||
@(negedge aud_clk_i);
|
||||
#1;
|
||||
if (aud_clk_o !== 1'b0) begin
|
||||
$fatal(1, "buffered audio clock did not follow a falling edge");
|
||||
end
|
||||
end
|
||||
wait (aud_rst_n_o);
|
||||
repeat (12) @(posedge sys_clk_o);
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ from __future__ import annotations
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import tarfile
|
||||
@@ -16,6 +17,8 @@ DOMAINS = ROOT / "rtl/mini/integration/clock_reset_domains.json"
|
||||
PIN_MAP = ROOT / "rtl/mini/pin_map/pin_map.json"
|
||||
GENERATOR = ROOT / "physical/smoke/sta/opensta/generate_sdc.py"
|
||||
OPENSTA_MAKEFILE = ROOT / "physical/smoke/sta/opensta/opensta.mk"
|
||||
RCU = ROOT / "rtl/mini/top/rcu.sv"
|
||||
RETROSOC_ASIC = ROOT / "rtl/mini/top/retrosoc_asic.sv"
|
||||
GF180_GENERATOR = ROOT / "physical/pdk/generate_gf180_liberty.py"
|
||||
ICS55_PREPARER = ROOT / "physical/pdk/prepare_ics55_liberty.py"
|
||||
ICS55_SIM_MODEL_PREPARER = ROOT / "physical/pdk/prepare_ics55_sim_model.py"
|
||||
@@ -59,6 +62,17 @@ def test_core_sdc_covers_current_clock_domains(tmp_path: Path) -> None:
|
||||
assert "set_false_path -from $reset_ext_rst_n_i_pad" in sdc
|
||||
|
||||
|
||||
def test_audio_sdc_root_drives_the_functional_audio_domain() -> None:
|
||||
rcu = RCU.read_text(encoding="utf-8")
|
||||
asic = RETROSOC_ASIC.read_text(encoding="utf-8")
|
||||
|
||||
assert re.search(r"\boutput\s+logic\s+aud_clk_o\b", rcu) is not None
|
||||
assert re.search(r"\bassign\s+aud_clk_o\s*=\s*s_aud_clk_buf\s*;", rcu) is not None
|
||||
assert re.search(r"\.aud_clk_o\s*\(s_aud_clk_buf\)", asic) is not None
|
||||
assert re.search(r"\.clk_aud_i\s*\(s_aud_clk_buf\)", asic) is not None
|
||||
assert re.search(r"\.clk_aud_i\s*\(s_aud_clk\)", asic) is None
|
||||
|
||||
|
||||
def test_opensta_invocation_exits_after_a_tcl_error() -> None:
|
||||
makefile = OPENSTA_MAKEFILE.read_text(encoding="utf-8")
|
||||
|
||||
|
||||
Reference in new issue
Block a user