对于这段代码,我看到两个断言都失败了。似乎禁用 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 …
我有一个带有特殊类型FLASH存储器的Cortex M3部件.该部分在此FLASH上启动,但我需要运行一个函数来优化FLASH的速度.执行此操作的唯一方法是跳转到RAM并在那里执行这些功能(因为如果在正在优化的FLASH上运行,函数将崩溃).
ARM允许分散加载.这是一个解决方案,因为我可以将函数放入RAM并在我到达main后运行它们.但是我不想在没有优化的FLASH的情况下执行所有的分散加载.所以我想在main之前运行该函数,这意味着从重置处理程序,或从SystemInit(从重置处理程序调用).
我写了一些位于ROM中的汇编函数.在启动时,我调用我写的Relocate函数,然后将其他函数复制到RAM,然后我跳转到它们.这很有效.
我的问题是:
在.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
有人可以阐明这里的区别吗:
$(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)