新浪博客

QuartusII中LPM_COUNTER的使用

2010-02-09 14:00阅读:
ALTERA建议,在设计时时序允许的情况下尽量使用Megafunction的资源,因为在多数情况下Megafunction的综合和实现结果更为优化。现在,就LPM_COUNTER的使用,浅谈一下。
MegafunctionLPM_COUNTER的参数设定主要是以下三部分:
1. 计数输出值位数和计数方向的设定:
QuartusII中LPM_COUNTER的使用
2. 计数系数和使能及进位的设定:
QuartusII中LPM_COUNTER的使用
需要注意的是:这里的Count Enable计数使能,即其只是计数的使能信号,加载信号并不受它的控制。
3. 所需同步输入和异步输入的设定:
QuartusII中LPM_COUNTER的使用

其实,这三个部分的设定很简单,主要是我们如何使用这些设定的问题。平时的数字设计中,我们经常需要对一些脉冲进行计数,而且是要求计到某个值时,产生一个相应的输出,相当于我们通过计数产生一个标志信号,在这种情况下,moduluscarry_out的设定就起了作用了。现在我将modulus设为30,选择向上计数的8位计数器,并选中carry_out,看一下仿真波形如下:
QuartusII中LPM_COUNTER的使用
也就是说,这时cout就可以做为一个标志信号,用来决定其他相关操作开始的标志。通过这样简单的设定,无疑节省了我们编写代码的工作时间,尽管这个设计代码量很小。
好,现在再来看一下次LPM_COUNTERverilog代码,如下:
`timescale 1 ps / 1 ps
// synopsys translate_on
module alt_counter (
aclr,
clock,
cnt_en,
sset,
updown,
cout,
q);

input aclr;
input clock;
input cnt_en;
input sset;
input updown;
output cout;
output [7:0] q;

wire sub_wire0;
wire [7:0] sub_wire1;
wire cout = sub_wire0;
wire [7:0] q = sub_wire1[7:0];

parameter n=30; //%%%%%%%%%%%//

lpm_counter lpm_counter_component (
.aclr (aclr),
.clock (clock),
.updown (updown),
.sset (sset),
.cnt_en (cnt_en),
.cout (sub_wire0),
.q (sub_wire1),
.aload (1'b0),
.aset (1'b0),
.cin (1'b1),
.clk_en (1'b1),
.data ({8{1'b0}}),

我的更多文章

下载客户端阅读体验更佳

APP专享