verilog语法--边沿检测

verilog语法--边沿检测,第1张

先回答你的第二个问题:因为你没有指定位宽,所以系统提示默认为32位

所以你将out <= out + 1 改为out <= out + 1'b1 就可以了。

另外注意:在时序电路里面要用<=

再回答你的第一个问题

只需要将load信号先进行上升沿检测,(即在上升沿装载)即可,这样即使load一直为高电平,也不会影响计数。至于你提到的当reset有效时漏掉计数是正确的,否则复位也就没有意义了。

module count(out,data,load,reset,clk)

output[7:0] out

input[7:0] data

input load,clk,reset

reg[7:0] out

//下面是进行load上升沿检测的代码,这样即使load一直为高电平,也不会影响计数

reg ld_r1,ld_r2

wire load_p

always @(posedge clk) begin

if (!reset) begin

ld_r1<=1'b0

ld_r2<=1'b0

end

else begin

ld_r1<=load

ld_r2<=ld_r1

end

end

assign load_p = ld_r1 &(~ld_r2)

//----------------------------------

always @(posedge clk) begin

if (!reset)

out <= 8'h0

else

if (load_p) //这里需要改成 load_p

out <= data

else

out <= out + 1'b1

end

endmodule

西门子S7-300中RLO边沿检测指令分别为:

1、POS

地址上升沿检测

符号

参数

数据类型

存储区

描述

<地址1>

BOOL

I、Q、M、L、D

已扫描信号

<地址2>

BOOL

I、Q、M、L、D

M_BIT边沿存储位,存储<地址1>的前一个信号状态

Q

BOOL

I、Q、M、L、D

单触发输出

描述

POS

(地址上升沿检测)比较<地址1>的信号状态与前一次扫描的信号状态(存储在<地址2>中)。如果当前RLO状态为"1"且其前一状态为"0"(检测到上升沿),执行此指令后RLO位将是"1"。

2、NEG

地址下降沿检测

符号

参数

数据类型

存储区

描述

<地址1>

BOOL

I、Q、M、L、D

已扫描信号

<地址2>

BOOL

I、Q、M、L、D

M_BIT边沿存储位,存储<地址1>的前一个信号状态

Q

BOOL

I、Q、M、L、D

单触发输出

描述

NEG

(地址下降沿检测)比较<地址1>的信号状态与前一次扫描的信号状态(存储在<地址2>中)。如果当前RLO状态为"0"且其前一状态为"1"(检测到上升沿),执行此指令后RLO位将是"1"。

S7-300是德国西门子公司生产的可编程序控制器(PLC)系列产品之一。其模块化结构、易于实现分布式的配置以及性价比高、电磁兼容性强、抗震动冲击性能好,使其在广泛的工业控制领域中,成为一种既经济又切合实际的解决方案。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/7814574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存