小编Mou*_*tix的帖子

Verilog相当于"等到......为......"?

在Verilog测试平台中,我试图编写以下行为:

具有以下行为(提醒):

  • 事件发生;
  • 或持续时间到期.

除非我弄错了,我在Verilog中找不到任何直接等效的函数...所以我尝试了以下代码:

reg watchdog;
// ...

// Set a signal 'watchdog' in background which will be triggered in 10 us.
fork
  watchdog <= #10_000 1'b1;
join

// Wait until SIGNAL is set to '1' *OR* watchdog event occurs.
@(posedge SIGNAL or posedge watchdog);

// Reset the watchdog
watchdog <= 1'b0;
Run Code Online (Sandbox Code Playgroud)

此代码完成工作,但最后一条指令不取消或取代fork指令.因此,在第二次调用此代码时(例如watchdog <= #50_000 1'b1;),watchdog可能会触发第一次(很快就会发生).

有什么好主意吗?(取消第一次计划的等效或方式fork?)

PS:在SystemVerilog中这样做不是一个选项... ;-)

verilog vhdl

9
推荐指数
1
解决办法
3万
查看次数

擦除Flash NOR:ioctl(MEMUNLOCK)返回状态?

我正试图用C语言中的Linux MTD驱动程序擦除NOR闪存......

我对来自ioctl(MEMUNLOCK)调用的返回状态感到困惑,即使ioctl(MEMERASE)在它之后成功也会返回错误.

以下代码显示警告消息但有效(即Flash块已被删除):

int erase_MTD_Pages(int fd, size_t size, off_t offset)
{
    mtd_info_t   mtd_info;
    erase_info_t ei;

    ioctl(fd, MEMGETINFO, &mtd_info);
    ei.length = mtd_info.erasesize;

    for(ei.start = offset; ei.start < (offset+size); ei.start += mtd_info.erasesize) {
        if(ioctl(fd, MEMUNLOCK, &ei) < 0)
        {
//          logPrintf(FAILURE, "[Flash] Can not unlock MTD (MEMUNLOCK, errno=%d)!\n", errno);
//          return RETURN_FILE_ERROR;
            logPrintf(WARNING, "[Flash] Can not unlock MTD (MEMUNLOCK, errno=%d)!\n", errno);

        }
        if(ioctl(fd, MEMERASE, &ei) < 0)
        {
            logPrintf(FAILURE, "[Flash] Can not erase MTD (MEMERASE, errno=%d)!\n", errno); …
Run Code Online (Sandbox Code Playgroud)

c flash-memory embedded-linux

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

标签 统计

c ×1

embedded-linux ×1

flash-memory ×1

verilog ×1

vhdl ×1