作者zxvc (执着)
看板Electronics
标题Re: [问题] Quartus_verilog 为什麽输出的波型是错的
时间Sat Apr 10 11:23:33 2010
Show一下SystemVerilog。
modtest应该是可合成的,
请用Design Compiler、Synplify、Precision RTL或Quartus II合看看。
建议原po把一样的东西assign到一个变数,之後就可以很方便参考,
code也比较好维护。
例如原po的code重复出现这些东西:
(((abslution_xa<<4'b1010))>>bi)
假如你後来发现这段code有错,哪种方式比较好改?
我模拟的结果是这样:
bi=4, m=384
主要是计算这个式子:
512-(1024*|x-a|/b)
不确定是不是原po想要的。
~~~~~~~~~~~~~~~~~~~~~~ modtest.sv ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
module modtest(
output [12:0] m,
output logic [2:0] bi,
input [4:0] x,
input [4:0] a, b
);
logic [4:0] larger, smaller, absVal;
integer i;
// Encoder.
always_comb begin
for(i = 0; i < 5; i = i+1) begin: Encoder
if(b[i])
bi = i;
end
end
assign larger = (a>=x) ? a : x;
assign smaller = (a>=x) ? x : a;
assign absVal = larger-smaller;
assign m = 512-(((absVal)<<10)>>bi);
endmodule
program modtestTb(
output logic [4:0] x,
output logic [4:0] a, b
);
initial begin
a=19;
b=16;
x=21;
#100;
$finish;
end
endprogram
module Top;
logic [12:0] m;
logic [2:0] bi;
logic [4:0] x;
logic [4:0] a, b;
modtestTb modtestTbInst(.*);
modtest modtestInst(.*);
endmodule
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.8.249
1F:推 psw:谢谢Z大大回应...我学到很多东西. <(_ _)> 04/10 11:29
2F:→ zxvc:psw大,还有一点,Encoder只是一个combinational circuit, 04/10 12:19
3F:→ zxvc:你写在always@(posedge clock)会多出不必要的flip-flop。 04/10 12:19
4F:推 psw:已解决罗...^^ 04/11 11:25