fei1314yan
发表于 2012-3-1 20:29:23
请问老师
有局部变量的模块的 测试块怎么写
原代码
module fuzhi(A,clk,D);
input A,clk;
output D;
reg D;
always@(posedge clk)
begin :blk
reg B,C;/*局部变量*/
C=B;
D<=C;
B=A;
end
endmodule
测试块
module test;
reg clk;
fuzhi A1 (A,clk,D);
initial /*初始赋值,我想对局部变量也进行赋值*/
begin
B=1;
C=1;
A=0;
clk=0;
end
always
begin
#50 clk<=~clk;
#50 B<=~B;
#50 A<=~A;
#50 C<=~C;
end
endmodule
事实证明,这样写是不可行的.请问怎么样才可以对局部的参数也修改,以更好的观看波形
夏宇闻
发表于 2012-3-2 05:52:59
请问老师
有局部变量的模块的 测试块怎么写
原代码
module fuzhi(A,clk,D);
input A,clk;
output...
fei1314yan 发表于 2012-3-1 20:29 http://www.fpgaw.com/images/common/back.gif
硬件描述语言描述对象是硬件电路。模块引用时可以通过各模块的输入输出接口连接进行信号变量的传送。模块内部的常数可以用参数即parameter从块外向块内传递。您应该先认真读一遍我编写书中的语法部分,细细体会,针对思考题上提出的问题反复思考。很快就能明白。您贴的代码我不明白您究竟想表达什么硬件的行为或电路。
a11835
发表于 2012-3-2 14:57:07
我想做一个频率计
clk是信号,
en是一个0.5hz的时钟,
load=~en,
clr=(load&~clk0(一个1hz的时钟))
module pi(clk,en,clr,load,c);
input clk,en,clr,load;
output c;
reg a0;reg a_0;
always @(posedge clk or posedge clr)
begin
if (clr) a0<=4'b0000;
else if (en)
begin if (a0==4'b1001)
begin
a0<=4'b0000;a_0=1;end
else a0<=a0+1'b1;end
end
reg a1;reg a_1;
always @(posedge a_0 or posedge clr)
begin if (clr) a1<=4'b0000;
else if (en)
begin if (a1==4'b1001)begin
a1<=4'b0000;a_1<=1;end
else a1<=a1+1'b1;end
end
reg a11;reg a_11;
always @(posedge a_1 or posedge clr )
begin if (clr) a11<=4'b0000;
else if (en)
begin if (a11==4'b1001)begin
a11<=4'b1001;a_11<=1;end
else a11<=a11+1'b1;end
end
reg a3;
always @(posedge a_11 or posedge clr)
begin
if (clr) a3<=4'b0000;
else if (en)
begin if (a3==4'b1001)
a3<=4'b0000;
else a3<=a3+1'b1;end end
reg c;
always @(posedge load )
begin if (load )c<={a3,a11,a1,a0};
end endmodule
这是我写的程序,clk的频率一旦超过1.5khz就显示为1900;
小于1.5khz的话误差很大,请问一下是啥问题
807703678
发表于 2012-3-2 18:26:39
夏老师好,我是个新手,现在想做个带浮点的乘法器,请你指点。
夏宇闻
发表于 2012-3-4 06:10:03
我想做一个频率计
clk是信号,
en是一个0.5hz的时钟,
load=~en,
clr=(load&~clk0(一个1hz的时钟))
...
a11835 发表于 2012-3-2 14:57 http://www.fpgaw.com/images/common/back.gif
您应该用单时钟沿触发。您用了太多的时钟沿做触发不符合自动综合工具的基本要求。认真读一遍书和思考题自然就会明白。
夏宇闻
发表于 2012-3-4 06:17:43
本帖最后由 夏宇闻 于 2012-3-4 06:25 编辑
夏老师好,我是个新手,现在想做个带浮点的乘法器,请你指点。
807703678 发表于 2012-3-2 18:26 http://www.fpgaw.com/images/common/back.gif
既然新手先学基本的语法和基本电路。浮点数乘法器不同性能要求,设计方法和思路十分不同。很难回答您的问题。一般DSP工程实现均根据精度和速度要求用定点或查表实现,很少用纯浮点硬件乘法器实现。如果您研究CPU中的通用浮点计算核,应该读一遍digital arithmetic,这本书是美国伯克利大学电子系研究生的必修课,里面介绍了完全用数字逻辑实现的各种算术代数运算。
ddd
发表于 2012-3-5 09:21:26
Xilinx 的报告里面有提示硬件消耗,具体是指什么
number of slices
number of slice flip flops
number of 4 input luts
夏宇闻
发表于 2012-3-5 15:02:54
本帖最后由 夏宇闻 于 2012-3-5 15:32 编辑
Xilinx 的报告里面有提示硬件消耗,具体是指什么
number of slices
number of slice flip flops
numb ...
ddd 发表于 2012-3-5 09:21 http://www.fpgaw.com/images/common/back.gif
单元个数;单元内触发器个数;4输入查找表个数。单元是指构成FPGA的最小独立细胞,在Altera FPGA中称Cell。xilinx FPGA中的slice,相当于Altera FPGA中的Cell。不同类型的FPGA的单元大小定义有差别,要认真读说明书,才能准确知道。通常用逻辑单元块,即CLB个数来规范FPGA规模。
1个CLB=2个slice,而1个slice包括4个LUT(or DistRAM)和8个触发器,比较通用的表示逻辑大小的单位是Logic cell,一般认为1个LUT+1触发器=1LC
807703678
发表于 2012-3-6 21:41:33
回复 256# 夏宇闻
谢谢夏老师指点
gaiya111
发表于 2012-3-8 15:18:01
夏老师
我用modelsim 仿真lpm_rom时出现以下问题 请帮我分析下 谢谢 程序用vhdl编写 rom使用mif格式
# Cannot continue because of fatal error.
# HDL call sequence:
# Stopped at C:/altera/11.1/modelsim_ase/win32aloem/../altera/vhdl/src/altera_mf/altera_mf.vhd 40040 Subprogram read_my_memory
# called fromC:/altera/11.1/modelsim_ase/win32aloem/../altera/vhdl/src/altera_mf/altera_mf.vhd 41612 Process MEMORY