@@ -734,9 +734,7 @@ module fixture_pms_top;
734734 assign sclIm = w_i2c_slv_scl[0 ];
735735
736736 // Control external interrupts
737- logic scg_irq, scp_irq, scp_secure_irq;
738- logic [71 : 0 ] mbox_irq, mbox_secure_irq;
739-
737+ logic [pms_top_pkg :: NUM_EXT_INTERRUPTS - 1 : 0 ] s_irq_ext;
740738
741739 //
742740 // Simulation pad-frame
@@ -1212,6 +1210,7 @@ module fixture_pms_top;
12121210 .N_I2C_SLV (pms_top_pkg :: N_I2C_SLV ),
12131211 .N_SPI (pms_top_pkg :: N_SPI ),
12141212 .N_UART (pms_top_pkg :: N_UART ),
1213+ .NUM_EXT_INTERRUPTS (pms_top_pkg :: NUM_EXT_INTERRUPTS ),
12151214
12161215 // D2D link
12171216 .USE_D2D (USE_D2D ),
@@ -1358,11 +1357,7 @@ module fixture_pms_top;
13581357 .wdt_alert_o (),
13591358 .wdt_alert_clear_i (1'b0 ),
13601359
1361- .scg_irq_i (scg_irq),
1362- .scp_irq_i (scp_irq),
1363- .scp_secure_irq_i (scp_secure_irq),
1364- .mbox_irq_i (mbox_irq),
1365- .mbox_secure_irq_i (mbox_secure_irq),
1360+ .irq_ext_i (s_irq_ext),
13661361
13671362
13681363 // Inout signals are split into input, output and enables
@@ -1904,71 +1899,20 @@ module fixture_pms_top;
19041899 .mst_resp_i (to_sim_mem_resp)
19051900 );
19061901
1907- // Very basic doorbell modules, one for each interrupt line (external + clint)
1908- logic db_trigger_scg = 1'b0 ;
1909- logic db_trigger_scp = 1'b0 ;
1910- logic db_trigger_scp_secure = 1'b0 ;
1911- logic db_scg_irq;
1912- logic db_scp_irq;
1913- logic db_scp_secure_irq;
1914- logic [71 : 0 ] db_trigger_mbox = '0 ;
1915- logic [71 : 0 ] db_trigger_mbox_secure = '0 ;
1916- logic [71 : 0 ] db_mbox_irq;
1917- logic [71 : 0 ] db_mbox_secure_irq;
1918- // logic [31:0] db_trigger_clint;
1919- // logic [31:0] db_clint_irq;
1920-
1921- // Wrap trigger signals in one array
1922- logic [255 : 0 ] db_trigger = {
1923- { 77 { 1'b0 }} , // 77 (systemverilog has default:0 but that doesn't work reliably)
1924- db_trigger_mbox_secure, // 72
1925- db_trigger_mbox, // 72
1926- db_trigger_scp_secure, // 1
1927- db_trigger_scp, // 1
1928- db_trigger_scg // 1
1929- } ;
1902+ // Very basic doorbell modules, one for each interrupt line. This is for fast
1903+ // tracking if we can trigger hardware interrupt lines.
1904+ logic [pms_top_pkg :: NUM_EXT_INTERRUPTS - 1 : 0 ] db_trigger;
1905+ logic [pms_top_pkg :: NUM_EXT_INTERRUPTS - 1 : 0 ] db;
19301906
19311907 // Assign firing interrupt from doorbells to pms_top
1932- assign scg_irq = db_scg_irq;
1933- assign scp_irq = db_scp_irq;
1934- assign scp_secure_irq = db_scp_secure_irq;
1935- assign mbox_irq = db_mbox_irq;
1936- assign mbox_secure_irq = db_mbox_secure_irq;
1937-
1938- doorbell i_doorbell_scg (
1939- .clk_i (s_clk_ref),
1940- .rst_ni (s_rst_n),
1941- .db_trigger_i (db_trigger[0 ]),
1942- .irq_o (db_scg_irq)
1943- );
1944-
1945- doorbell i_doorbell_scp (
1946- .clk_i (s_clk_ref),
1947- .rst_ni (s_rst_n),
1948- .db_trigger_i (db_trigger[1 ]),
1949- .irq_o (db_scp_irq)
1950- );
1951-
1952- doorbell i_doorbell_scp_sec (
1953- .clk_i (s_clk_ref),
1954- .rst_ni (s_rst_n),
1955- .db_trigger_i (db_trigger[2 ]),
1956- .irq_o (db_scp_secure_irq)
1957- );
1958-
1959- for (genvar i = 0 ; i < 72 ; i++ ) begin : doorbell_mbox_irq
1960- doorbell i_doorbell_mbox (
1961- .clk_i (s_clk_ref),
1962- .rst_ni (s_rst_n),
1963- .db_trigger_i (db_trigger[i+ 3 ]),
1964- .irq_o (db_mbox_irq[i])
1965- );
1908+ assign s_irq_ext = db;
19661909
1967- doorbell i_doorbell_mbox_sec (
1910+ for (genvar i = 0 ; i < pms_top_pkg :: NUM_EXT_INTERRUPTS - 1 ; i++ ) begin : doorbell_irq
1911+ doorbell i_doorbell (
19681912 .clk_i (s_clk_ref),
19691913 .rst_ni (s_rst_n),
1970- .db_trigger_i (db_trigger[i+ 75 ]),
1971- .irq_o (db_mbox_secure_irq [i])
1914+ .db_trigger_i (db_trigger[i]),
1915+ .irq_o (db [i])
19721916 );
19731917 end
19741918
@@ -2720,7 +2664,7 @@ module fixture_pms_top;
27202664 // Interrupts control: driver tasks
27212665 //
27222666
2723- task db_trigger_irq (input logic [255 : 0 ] mask);
2667+ task db_trigger_irq (input logic [pms_top_pkg :: NUM_EXT_INTERRUPTS - 1 : 0 ] mask);
27242668 db_trigger & = '0 ; // make sure the irq array is zero
27252669 db_trigger | = mask;
27262670 endtask // ext_irq_trigger
0 commit comments