我想在包中编写一些任务,然后将该包导入到使用这些任务的一些文件中。
这些任务之一会切换复位信号。任务为reset_board,代码如下:
package tb_pkg;
task reset_board(output logic rst);
rst <= 1'b0;
#1;
rst <= 1'b1;
#1;
rst <= 1'b0;
#1;
endtask
endpackage
Run Code Online (Sandbox Code Playgroud)
但是,如果我理解正确的话,输出仅在执行结束时分配,因此在这种情况下,rst
信号将在任务执行结束时设置为 0,这显然不是我想要的。
如果该任务是在使用它的模块中本地声明的,我可以直接引用该rst
信号(因为它是在模块中声明的)。但是,这不允许我将任务放入单独的包中。我可以将任务放入一个文件中,然后将其包含在模块中,但我试图避免 SystemVerilog 处理包含的方式带来的令人讨厌的复杂情况(长话短说,它不像 C 那样工作)做)。
那么,有没有什么方法可以让任务在执行期间驱动具有不同值的输出,而不必引用全局变量呢?
我正在编写一个简单的即时消息客户端和服务器来获取套接字编程的句柄.
我的客户有两个主题:
当用户按下Ctrl-D时,客户端向服务器发送一条特殊消息,说"客户端想要断开连接",此时服务器关闭该用户的连接文件描述符.这导致线程A退出循环,因为readline函数返回EOF.然后,线程A关闭连接文件描述符并完成.
同时,线程B仍在收听用户的键盘输入,直到它们进入.理想情况下,fgets会提前中断并让用户知道其他客户端已断开连接.
无论如何要做或者我需要使用不同的输入函数或库吗?