小编mas*_*tch的帖子

如何创建一个在不使用全局变量的情况下跨时间驱动输出的任务?

我想在包中编写一些任务,然后将该包导入到使用这些任务的一些文件中。

这些任务之一会切换复位信号。任务为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 那样工作)做)。

那么,有没有什么方法可以让任务在执行期间驱动具有不同值的输出,而不必引用全局变量呢?

system-verilog

2
推荐指数
1
解决办法
5097
查看次数

如何突破fgets?

我正在编写一个简单的即时消息客户端和服务器来获取套接字编程的句柄.

我的客户有两个主题:

  • 线程A与服务器具有流式套接字连接,并在循环中执行读取线,打印出从服务器接收的文本行.如果readline返回EOF,则循环退出.
  • 线程B在循环中使用fgets监听来自用户的键盘输入.当用户按下回车键时,它会将该行发送到服务器(因此它可以将其转发给其他客户端).

当用户按下Ctrl-D时,客户端向服务器发送一条特殊消息,说"客户端想要断开连接",此时服务器关闭该用户的连接文件描述符.这导致线程A退出循环,因为readline函数返回EOF.然后,线程A关闭连接文件描述符并完成.

同时,线程B仍在收听用户的键盘输入,直到它们进入.理想情况下,fgets会提前中断并让用户知道其他客户端已断开连接.

无论如何要做或者我需要使用不同的输入函数或库吗?

c fgets

1
推荐指数
1
解决办法
1449
查看次数

标签 统计

c ×1

fgets ×1

system-verilog ×1