我正在浏览一个来自微半导体网站(Actel HDL代码)的文档,我发现了一些触发器(同步,异步等).In的实现--所有的例子都是作者用阻塞语句对触发器建模的。
我想知道这些实现是否正确,因为我一直使用非阻塞来建模顺序逻辑?我是遗漏了什么,还是仅仅是一种模拟触发器的方式,而不是一般的时序电路?
// Rising Edge Flip-Flop with Asynchronous Reset
module dff_async_rst (data, clk, reset, q);
input data, clk, reset;
output q;
reg q;
always @(posedge clk or negedge reset)
if (~reset)
q = 1'b0;
else
q = data;
endmodule
//Rising Edge Flip-Flop with Synchronous Reset
module dff_sync_rst (data, clk, reset, q);
input data, clk, reset;
output q;
reg q;
always @ (posedge clk)
if (~reset)
q = 1'b0;
else
q = data;
endmodule注意:总是块中使用阻塞赋值来获得顺序逻辑。
发布于 2014-09-17 11:55:20
触发器应该按照您以前的想法使用非阻塞(<=)建模。
如果在verilog 1995之后使用任何版本的verilog,那么可以稍微整理一下端口声明。为了清晰起见,我添加了begin,并添加了_n来指定活动的低信号。
带异步复位的上升边缘触发器
module dff_async_rst (
input data,
input clk,
input reset_n,
output reg q //SystemVerilog logic is preferred over reg
);
always @(posedge clk or negedge reset_n) begin
if (~reset_n) begin
q <= 1'b0;
end
else begin
q <= data;
end
end
endmodule同步复位的上升边缘触发器
module dff_sync_rst(
input data,
input clk,
input reset_n,
output reg q //SystemVerilog logic is preferred over reg
);
always @(posedge clk) begin
if (~reset_n) begin
q <= 1'b0;
end
else begin
q <= data;
end
end
endmodulehttps://stackoverflow.com/questions/25882292
复制相似问题