打印

verilog小数如何表示

[复制链接]
4656|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 aikimi7 于 2012-3-1 09:53 编辑

现在我要实现以下的算法,遇到了问题,首先是小数乘法的问题。想要实现的功能是通过迭代,Y周期性输出01010101.。。。。。
算法如下:
F(t) = KF*F(t-1) + S;
E(t) = KE*E(t-1) + VT*Y;
if F(t)>E(t-1), Y =1;else Y=0;

其中KF、KE都是小数,那么怎样表示呢?verilog不支持小数啊?用定标表示不是很理解啊,小数定标了,那其他原来的整数呢??
verilog代码如下:
module pcnn(clk,rst,S,Y);
input clk,rst;
input[7:0] S;
output Y;

parameter KF = 108,KE = 239,VT = 5120;//Q8

//reg       Y_reg;
reg[15:0] F_reg;
reg[15:0] E_reg;

wire       Y;
wire[15:0] F;
wire[15:0] E;

assign F = KF*F_reg + S;             //zuhe
assign E = Y?KE*E_reg:VT;
//assign E = KE*E_reg + (Y?VT:0);
assign Y = (F>E_reg)? 1 : 0;//E_reg:number of the last time,not E.

always@(posedge clk)                //shixu
begin
        if(!rst)
        begin
                //Y_reg <= 0;
                F_reg <= 0;
                E_reg <= VT;
        end
        else
                //Y_reg <= Y;
                F_reg <= F;
                E_reg <= E;
end
endmodule

pcnn2.jpg (40.42 KB )

pcnn2.jpg

相关帖子

沙发
Backkom80| | 2012-3-2 09:08 | 只看该作者
assign F = KF*F_reg + S;             //zuhe
assign E = Y?KE*E_reg:VT;
//assign E = KE*E_reg + (Y?VT:0);
assign Y = (F>E_reg)? 1 : 0;//E_reg:number of the last time,not E.

这地有问题,*这个东西综合出来的不一定是你想要的。

使用特权

评论回复
板凳
aikimi7|  楼主 | 2012-3-5 17:32 | 只看该作者
2# Backkom80 那乘法用什么实现呢?

使用特权

评论回复
地板
Backkom80| | 2012-3-5 17:35 | 只看该作者
要么用IP核,要么自己写乘法器

使用特权

评论回复
5
GoldSunMonkey| | 2012-3-5 23:07 | 只看该作者
:)是的:)

使用特权

评论回复
6
aikimi7|  楼主 | 2012-3-6 20:29 | 只看该作者
4# Backkom80 自己写乘法器指的是调用乘法器这个模块吗?
如果我在一个模块里用always语句实现这样可以吗?

使用特权

评论回复
7
GoldSunMonkey| | 2012-3-6 21:33 | 只看该作者
不一定。
比方A*13可以转换为A*8+A*4+A*1,
这样您就可以变乘法为移位,就不需要乘法器了。
不过这个要看您的需求了。

使用特权

评论回复
8
Backkom80| | 2012-3-6 22:54 | 只看该作者
不一定。
比方A*13可以转换为A*8+A*4+A*1,
这样您就可以变乘法为移位,就不需要乘法器了。
不过这个要看您的需求了。
GoldSunMonkey 发表于 2012-3-6 21:33



是的,正是猴哥说的这个思想。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

136

帖子

0

粉丝