Quartus中有符号数和无符号数比较大小

  有符号数和无符号数比较大小,有符号数会被当做无符号数。
  代码如下。我把波形信号data和dac输出进行比较,比较结果如图。可以看到当data为正时,比较结果是对的;当data为负时,被当做正的进行比较了。

reg [19:0] signed data;
reg [18:0] unsigned dac_out;
wire cmp_out;
assign cmp_out = (data > dac_out)? 1'b1: 1'b0;

在这里插入图片描述
  结论:有符号数只能和有符号数比较

reg [19:0] signed data;
reg [19:0] signed dac_out;
wire cmp_out;
assign cmp_out = (data > dac_out)? 1'b1: 1'b0;

在这里插入图片描述
附代码文件和数据文件:
代码

`timescale 1ns/1ns
module file_operation_tb;

reg clk_50M;
reg signed [19:0] data; 	// 18+1, 1 for sign bit
reg unsigned [31:0] count;  // data counter
integer fp; 	// file handler
wire cmp_out; 	// comparator output
reg unsigned [31:0] wave_cnt; // wave counter
wire signed [19:0] dac_out;   // dac output
reg [15:0] dac_load;          // dac loading value
wire [31:0] buffer;

initial begin
	clk_50M = 1'b0;
	data = 20'd0;
	count = 32'd0;
	wave_cnt = 32'd0;
end

always #10 clk_50M = ~clk_50M;

initial begin
	#100
	fp = $fopen("../../../testbench/sine.txt", "r");
	if(!(|fp)) begin
		$display("cannot open file\n");
		#100
		$stop;
	end
	else begin	
		while(wave_cnt < 32'd50) begin // genearte 50 sine waves
			$display("reading file...\n");
			while(!($feof(fp))) begin
				@(posedge clk_50M) begin
					$fscanf(fp, "%d", data);
					count <= count + 32'd1;
					//$display("%d	%d", data, count);
				end
			end
			$display("done reading: round %d\n", wave_cnt + 1);
			$fseek(fp, 0, 0);
			wave_cnt = wave_cnt + 1;
		end	
		$fclose(fp);
		#500
		$stop;
	end
end

assign cmp_out = (data > dac_out)? 1'b1: 1'b0;

initial begin
	dac_load = 16'd1;
end

always@(wave_cnt) begin
	if(wave_cnt < 30 && !(wave_cnt % 2)) // take dac load by 2 every 2 sine waves in the first 30 waves
		dac_load <= dac_load << 1;
	else
		dac_load <= dac_load;
end

assign buffer = dac_load; // use buffer to avoid truncature
assign dac_out = (((buffer * 5000) >> 8) * 100) >> 8;

endmodule

数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值