| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| module dmidpi #( |
| parameter string Name = "dmi0", // name of the interface (display only) |
| parameter int ListenPort = 44853 // TCP port to listen on |
| )( |
| input bit clk_i, |
| input bit rst_ni, |
| |
| output bit dmi_req_valid, |
| input bit dmi_req_ready, |
| output bit [6:0] dmi_req_addr, |
| output bit [1:0] dmi_req_op, |
| output bit [31:0] dmi_req_data, |
| input bit dmi_rsp_valid, |
| output bit dmi_rsp_ready, |
| input bit [31:0] dmi_rsp_data, |
| input bit [1:0] dmi_rsp_resp, |
| output bit dmi_rst_n |
| ); |
| |
| import "DPI-C" |
| function chandle dmidpi_create(input string name, input int listen_port); |
| |
| import "DPI-C" |
| function void dmidpi_tick(input chandle ctx, output bit dmi_req_valid, |
| input bit dmi_req_ready, output bit [6:0] dmi_req_addr, |
| output bit [1:0] dmi_req_op, output bit [31:0] dmi_req_data, |
| input bit dmi_rsp_valid, output bit dmi_rsp_ready, |
| input bit [31:0] dmi_rsp_data, input bit [1:0] dmi_rsp_resp, |
| output bit dmi_rst_n); |
| |
| import "DPI-C" |
| function void dmidpi_close(input chandle ctx); |
| |
| chandle ctx; |
| |
| initial begin |
| ctx = dmidpi_create(Name, ListenPort); |
| end |
| |
| final begin |
| dmidpi_close(ctx); |
| ctx = 0; |
| end |
| |
| always_ff @(posedge clk_i, negedge rst_ni) begin |
| dmidpi_tick(ctx, dmi_req_valid, dmi_req_ready, dmi_req_addr, dmi_req_op, |
| dmi_req_data, dmi_rsp_valid, dmi_rsp_ready, dmi_rsp_data, |
| dmi_rsp_resp, dmi_rst_n); |
| end |
| |
| endmodule |