c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) AttributeError: module 'subprocess' has no attribute 'fileno'
时间: 2023-08-27 08:10:08 浏览: 49
根据提供的引用内容,问题是关于`msvcrt.get_osfhandle(stdout.fileno())`的报错。引用和中的代码片段提供了一些相关信息。
根据引用中的代码注释,`c2pwrite`是一个文件描述符,而不是一个文件对象。因此,使用`stdout.fileno()`是错误的。
根据引用中的代码片段,`fileno()`方法是用于文件对象的,而不是`subprocess`模块。因此,`stdout`对象不应该是`subprocess`模块的一部分。
要解决这个问题,你需要确保`stdout`对象是从正确的位置引入的,并且是一个文件对象,而不是`subprocess`模块的一部分。
相关问题
task lvc_apb_master_monitor::collect_transfer(); // Advance clock @(vif.cb_mon iff (vif.cb_mon.psel === 1'b1 && vif.cb_mon.penable === 1'b0)); trans_collected = lvc_apb_transfer::type_id::create("trans_collected"); case(vif.cb_mon.pwrite) 1'b1 : begin @(vif.cb_mon iff vif.cb_mon.pready === 1'b1); trans_collected.addr = vif.cb_mon.paddr; trans_collected.data = vif.cb_mon.pwdata; trans_collected.trans_kind = WRITE; trans_collected.trans_status = vif.cb_mon.pslverr === 1'b0 ? OK : ERROR; end 1'b0 : begin @(vif.cb_mon iff vif.cb_mon.pready === 1'b1); trans_collected.addr = vif.cb_mon.paddr; trans_collected.data = vif.cb_mon.prdata; trans_collected.trans_kind = READ; trans_collected.trans_status = vif.cb_mon.pslverr === 1'b0 ? OK : ERROR; end default : `uvm_error(get_type_name(), "ERROR pwrite signal value") endcase endtask: collect_transfer
这段代码是关于一个名为 `lvc_apb_master_monitor` 的任务,它的作用是收集 APB 总线上的传输信息。在这个任务中,先是通过 `lvc_apb_transfer::type_id::create("trans_collected")` 创建了一个名为 `trans_collected` 的 APB 传输对象,然后根据 `vif.cb_mon.pwrite` 的值分别进行读写操作。如果 `vif.cb_mon.pwrite` 为 1,即写操作,则等待 `vif.cb_mon.pready` 为 1,然后将 `trans_collected` 对象的地址和数据设置为当前的 `paddr` 和 `pwdata`,并将传输类型设置为 WRITE,传输状态设置为 OK 或 ERROR;如果 `vif.cb_mon.pwrite` 为 0,即读操作,则等待 `vif.cb_mon.pready` 为 1,然后将 `trans_collected` 对象的地址和数据设置为当前的 `paddr` 和 `prdata`,并将传输类型设置为 READ,传输状态设置为 OK 或 ERROR。最后,根据 `vif.cb_mon.pslverr` 的值,将 `trans_collected` 对象的传输状态设置为 OK 或 ERROR。
ask lvc_apb_master_driver::do_write(lvc_apb_transfer t); `uvm_info(get_type_name(), "do_write ...", UVM_HIGH) @(vif.cb_mst); vif.cb_mst.paddr <= t.addr; vif.cb_mst.pwrite <= 1; vif.cb_mst.psel <= 1; vif.cb_mst.penable <= 0; vif.cb_mst.pwdata <= t.data; @(vif.cb_mst); vif.cb_mst.penable <= 1; #10ps; wait(vif.pready === 1); #1ps; if(vif.pslverr === 1) begin t.trans_status = ERROR; if(cfg.master_pslverr_status_severity == UVM_ERROR) `uvm_error(get_type_name(), "PSLVERR asserted!") else `uvm_warning(get_type_name(), "PSLVERR asserted!") end else begin t.trans_status = OK; end repeat(t.idle_cycles) this.do_idle(); endtask: do_write
这段代码是一个 APB 总线驱动器的写操作,其中 `t` 是一个包含地址和数据等信息的传输结构体。具体操作如下:
1. 首先打印一条消息,说明正在进行写操作;
2. 等待 CB(Conduit Bundle)Master 的一个时钟周期;
3. 将传输结构体中的地址和数据写入 CB Master 中对应的寄存器中;
4. 设置 CB Master 的状态,表明有传输要进行,同时写信号被拉高;
5. 等待一个时钟周期,让 CB Master 的状态稳定;
6. 将 CB Master 的有效使能信号 `penable` 置为 1,表示传输开始;
7. 等待传输完成,即 CB Slave 的 `pready` 信号被置为 1;
8. 等待一个时钟周期,以保证 CB Slave 的状态稳定;
9. 判断传输是否成功,如果 `pslverr` 信号被置为 1,说明出现了传输错误,将传输结构体的状态设置为 ERROR;
10. 如果传输正常,则将传输结构体的状态设置为 OK;
11. 根据传输结构体中给定的空闲周期数,执行 `do_idle()` 函数,等待总线空闲。