恭喜,你发布的帖子
发布于 2024-04-17 13:14:58
15楼
每个(上升/下降)沿的检测,都得需要各自独立的存储器。
因为,必须保存上一周期的状态。这是无法省略的。
SCL编程,根本用不到什么IF THEN 条件判断;因为它本身就是布尔运算。
写法就是:
edgeSta := sinInput AND NOT edgeStaLast ;
edgeStaLast := edgeSta ; // 当sinInput 出现上升沿时,edgeSta 本周期为真=1;
edgeSta 即可在本周期,运算之后直接使用。
此外,当需要检测的信号组成字节、字或双字时,同样的上述语句,一次就可完成8个或16个、32个信号的上升沿检测。
edgeStaWord := sinInWord AND ( edgeStaLastWord XOR trueWord ) ; // trueWord =全为1的常数
edgeStaLastWord := edgeStaWord ; //<- 有指令分解成位数组
(字符串逻辑运算有NOT就用NOT;没有就用 XOR,一样的。)
每个(上升/下降)沿的检测,都得需要各自独立的存储器。
因为,必须保存上一周期的状态。这是无法省略的。
SCL编程,根本用不到什么IF THEN 条件判断;因为它本身就是布尔运算。
写法就是:
edgeSta := sinInput AND NOT edgeStaLast ;
edgeStaLast := edgeSta ; // 当sinInput 出现上升沿时,edgeSta 本周期为真=1;
edgeSta 即可在本周期,运算之后直接使用。
我在2楼提到用FC写就是这种方法去写。
edgeStaWord := sinInWord AND ( edgeStaLastWord XOR trueWord ) ; // trueWord =全为1的常数
edgeStaLastWord := edgeStaWord ; //<- 有指令分解成位数组
(字符串逻辑运算有NOT就用NOT;没有就用 XOR,一样的。)
edgeSta := sinInput AND NOT edgeStaLast ;
edgeStaLast := edgeSta ; // 当sinInput 出现上升沿时,edgeSta 本周期为真=1;
edgeSta 即可在本周期,运算之后直接使用。
我在2楼提到用FC写就是这种方法去写。
edgeStaWord ,sinInWord,edgeStaLastWord,trueWord 这几个输入接口数据格式是WORD吗?
请填写推广理由:
分享
只看
楼主