作者psw (ICK)
看板Electronics
标题[问题] Quartus_verilog 为什麽输出的波型是错的
时间Fri Apr 9 20:00:12 2010
各位大哥
可不可以帮小弟看一下这个程式码,为什麽出输波型是错的?
小弟我找了好久也找不出来..XD
这程式的义意是我要算1- (2*|x-a|/b)
但这不可能在verilog上run所以全乘512
得512-(1024*|x-a|/b)
^^^^^^^^^^^^^^^^^^^^^^^^ 这程式主要是要算这个 ^^
帮小弟解答出来的二百P币 ^^
<(_ _)>
----
这个
input的
a是乱数
b是乱数的2的次方数
x是乱数
而在输出时的m是错的
out_bi也是错的
ps. out_bi是取b的次方数
ex:
input ==> a=19,b=16,x=21时;
out ==> out_bi=3,m=0; (错误了)
应该====> out_bi=4,m=320;(正确的)
-------------
//以下为程式码;
module modtest(
input clock,
input [4:0] x,
input [4:0] a,b,
output [12:0] m,
output out_f_1,out_f_2,out_f_3,out_f_4
);
reg [12:0] x_1;
reg out_1,out_2,out_3,out_4;
reg nop;
reg [4:0] bi;
reg [31:0] abslution_xa;
always@(posedge clock)
begin
integer i;
for(i=0;i<5 ;i=i+1)
begin
if(b[i]==1)
begin
bi=i;
end
else
begin
nop=nop+1;
end
end
if((x-a)>=0)
begin
abslution_xa=x-a;
if((((abslution_xa<<4'b1010))>>bi)>=9'b100000000)
begin
x_1=0;
out_1=1;
out_2=0;
out_3=0;
out_4=0;
end
else
begin
x_1=9'b100000000-(((abslution_xa<<4'b1010))>>bi);
out_1=0;
out_2=1;
out_3=0;
out_4=0;
end
//multi=2^9
end
else
begin
abslution_xa=a-x;
if(((((abslution_xa)<<4'b1010))>>bi)>=9'b100000000)
begin
x_1=0;
out_1=0;
out_2=0;
out_3=1;
out_4=0;
end
else
begin
x_1=9'b100000000-((((abslution_xa)<<4'b1010))>>bi);
out_1=0;
out_2=0;
out_3=0;
out_4=1;
end
end
end
assign m=x_1;
assign out_f_1=out_1;
assign out_f_2=out_2;
assign out_f_3=out_3;
assign out_f_4=out_4;
endmodule
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.216.71
※ 编辑: psw 来自: 140.116.216.71 (04/09 20:04)
※ 编辑: psw 来自: 140.116.216.71 (04/09 20:05)
1F:推 luckyBF:b=16的话,b[4:0] = 2'b10000 ; b[4] = 1 ; bi = 4 04/09 20:47
2F:→ luckyBF:比较好奇nop是什麽?只有1个bit为什麽要一直加1? 04/09 20:48
因为有if 要配上一个else 但else不知道要算什麽,就用nop
3F:→ luckyBF:还有out_f_1到4是您用来debug用的吗XD 04/09 20:48
是的
※ 编辑: psw 来自: 140.116.216.71 (04/09 20:55)
4F:推 pupucar:谁告诉你一个if一定要配一个else的?HDL硬体描述语言 04/09 21:11
如果没配上有可能会产生Latch,不是吗?
5F:→ pupucar:就是用语言去model硬体 先搞清楚你写出来的东西会model成 04/09 21:13
※ 编辑: psw 来自: 140.116.216.71 (04/09 21:14)
6F:→ pupucar:什的东西 才是在写HDL 04/09 21:14
7F:推 pupucar:不是 04/09 21:16
8F:推 pupucar:你用自己的想法臆测半天想不通 怎不直接合成出来看硬体 04/09 21:18
9F:→ pupucar:通常是硬体设计完後才思考如何用HDL去model 04/09 21:19
10F:→ pupucar:你的作法刚刚好相法... 04/09 21:20
11F:推 luckyBF:for 里面的i应该要<5吧...还有这程式...真的要反省一下XD 04/09 21:45
啧啧...LUCK大你真专业..( ̄▽ ̄#)﹏﹏
※ 编辑: psw 来自: 140.116.216.71 (04/09 22:04)
12F:推 luckyBF:不不~~我很嫩~~这个版强者太多了!!但真的建议好好想想写法 04/09 22:09
问题还没解决...〒△〒
13F:推 mepass:一般来说 最好边写边对照netlist是不是自己要的 04/09 22:30
14F:→ mepass:不过前提是要有罗设或计组基础 04/09 22:31
※ 编辑: psw 来自: 140.116.216.71 (04/09 23:13)
15F:推 luckyBF:问题有可能在if那,x-a左移10bit,移完都不知道变什麽了~ 04/09 23:22
16F:→ luckyBF:重点要有电路的观念~不然真的只是在写「软体」而已 04/09 23:23
17F:→ bakerly:我想问个问题,你的答案是在第几个T得到的?还有个建议 04/10 00:16
18F:→ bakerly:写RTL每个讯号几个BIT最好清清楚楚,你的IF里的判断式写这 04/10 00:18
19F:→ bakerly:样不清不楚,全看simulator的脸色,很容易死的不明不白的 04/10 00:19
这样清楚了吗? ^^
可是还是有错误 XD..
※ 编辑: psw 来自: 140.116.216.71 (04/10 00:53)
※ 编辑: psw 来自: 140.116.216.71 (04/10 00:54)
20F:→ tkhan:这是在写C吗?..先搞懂基础再来.. 04/10 07:36
这位tk大大,我改了,不知道这样可不可以?不知道你觉得哪里有不普的地方? <(_ _)>
※ 编辑: psw 来自: 140.116.216.71 (04/10 10:11)
※ 编辑: psw 来自: 140.116.216.71 (04/10 10:25)
21F:推 sasako:9'b100000000写成9'd256或256 4'b1010写成10 会不会比较容 04/10 10:55
22F:→ sasako:易阅读呢? 04/10 10:55
23F:→ psw:是x-a的bit线没有标明出问题..已解决,谢谢大家的回应 ^ ^ 04/11 11:26