小编nac*_*hum的帖子

何时评估断言“禁用 iff”值?

对于这段代码,我看到两个断言都失败了。似乎禁用 iff (value) 的计算晚于表达式本身。有人可以解释一下吗?

module tb();
reg clk = 1;
always #5 clk = !clk;
reg rst = 1;
always @ (posedge clk)
    rst <= 0;

initial #11ns $finish();

assert property (@ (posedge clk) disable iff (rst) 1 |-> 0);
assert property (@ (posedge clk) rst |-> 0);
endmodule
Run Code Online (Sandbox Code Playgroud)

后续,如何测试这一点:

always_ff @ (posedge clk or posedge rst) begin
    if (rst) q <= 0;
    else q <= d;
end
Run Code Online (Sandbox Code Playgroud)

其中 rst 根据延迟被取消断言:

always_ff @ (posedge clk)
    rst <= rst_a;
Run Code Online (Sandbox Code Playgroud)

似乎禁用 iff …

system-verilog system-verilog-assertions

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

将arm cm3汇编代码从flash重新定位到ram

我有一个带有特殊类型FLASH存储器的Cortex M3部件.该部分在此FLASH上启动,但我需要运行一个函数来优化FLASH的速度.执行此操作的唯一方法是跳转到RAM并在那里执行这些功能(因为如果在正在优化的FLASH上运行,函数将崩溃).

ARM允许分散加载.这是一个解决方案,因为我可以将函数放入RAM并在我到达main后运行它们.但是我不想在没有优化的FLASH的情况下执行所有的分散加载.所以我想在main之前运行该函数,这意味着从重置处理程序,或从SystemInit(从重置处理程序调用).

我写了一些位于ROM中的汇编函数.在启动时,我调用我写的Relocate函数,然后将其他函数复制到RAM,然后我跳转到它们.这很有效.

我的问题是:

  1. 这听起来很疯狂吗?有没有更简单的方法来实现这一点(无需等待分散加载)?
  2. 在.s文件中,我有我将重新定位的函数.要使用这些重定位函数,我加载PROC标签,然后减去(FLASH - RAM)的偏移量.这感觉不便携.是否有另一种方法来计算重定位函数的正确PROC地址?例如:

    foo     PROC
            ...
            ...
            ENDP
    
    Run Code Online (Sandbox Code Playgroud)

foo从0x24000000的ROM开始,我需要将其移动到0x8000的RAM.有没有办法声明foo存在于0x8000,即使它必须存储在ROM中?或者有没有办法声明foo_reloc生活在0x8000?这也适用于THUMB代码,因为foo可能从0x24000001开始,需要在0x8001处调用.

谢谢,Nachum

assembly arm cortex-m3

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

用武力制定隐性规则 vs .phony

有人可以阐明这里的区别吗:

$(tsdir)/proj具有先决条件$(tsdir)/proja$(tsdir)/projb. 我希望每次构建时都调用proja's 和's makefile 。如果或已过时且已更新,则它们的 makefile 将分别触及和。如果这些文件比 更新,则重建 proj。projbprojprojaprojb$(tsdir)/proja$(tsdir)/projb$(tsdir)/proj

我通过使用下面的代码和FORCE目标来完成此工作。如果我尝试切换到使用.PHONY目标,这是行不通的。我更喜欢.PHONY,因为这被认为是更“正确”的做法。但它不起作用,我不知道为什么。proja's 和projb's makefile 不使用.PHONY目标调用,而是proj重建。

我正在使用 GNU make 3.81。

谢谢纳楚姆

$(tsdir)/proj: $(tsdir)/proja $(tsdir)/projb
...

$(tsdir)/%: FORCE  
    make -C $(prereqdir)/$*

FORCE:

#or

$(tsdir)/proj: $(tsdir)/proja $(tsdir)/projb
...

.PHONY: $(addprefix $(tsdir)/, $(projects))

$(tsdir)/%:  
    make -C $(prereqdir)/$*
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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