reg [15:0] max;
reg [15:0] min;
wire [15:0] zero;
initial begin
max = 10000;
min = 10000;
end
always@(posedge sys_clk)
begin
if(sin_out_0 > max)
max <= sin_out_0;
end
always@(posedge sys_clk)
begin
if(sin_out_0 < min)
min <= sin_out_0;
end
assign zero = (max+min)/2;
always@(posedge sys_clk)
begin
if(sin_out_0 > zero)
squ_0 <= 1'b1;
else
squ_0 <= 1'b0;
end
另外对仿真里正弦这类波形的值感到困惑,比如该仿真里可以通过调整数制和有符号看到正弦波的具体值且零点是0,但用在代码里却不对,波形每点的值是怎么确定的呢?
正弦波是有符号数,需要按有符号数去定义
比如:
这样就能通过数据是否大于 0 来做方波了。
wire signed [15:0] sin_out_0;
always@(posedge sys_clk)
begin
if(sin_out_0 > 0)
squ_0 <= 1'b1;
else
squ_0 <= 1'b0;
end
当然也可以这么用,判断 sin_out_0 最高位是不是 1 ,是1 就是负数
比如:
wire [15:0] sin_out_0;
always@(posedge sys_clk)
begin
if(sin_out_0[15] == 0)
squ_0 <= 1'b1;
else
squ_0 <= 1'b0;
end