[Verilog HDL] VERILOG基础知识

[复制链接]
9306|3
 楼主| gaochy1126 发表于 2023-5-29 14:36 | 显示全部楼层 |阅读模式
定点数原码表示

MSB是符号位,0表示正数,1表示负数。

[color=rgba(0, 0, 0, 0.75)]D=(−1)aB−1∑i=0B−2ai2i−B+1�=(−1)��−1∑�=0�−2��2�−�+1


[color=rgba(0, 0, 0, 0.75)]比如,二进制[color=rgba(0, 0, 0, 0.75)]0.110=(−1)0∗(1∗2−1+1∗2−2)=+0.750.110=(−1)0∗(1∗2−1+1∗2−2)=+0.75[color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]1.110=(−1)1∗(1∗2−1+1∗2−2)=−0.751.110=(−1)1∗(1∗2−1+1∗2−2)=−0.75[color=rgba(0, 0, 0, 0.75)]

反码表示(1’S COMPLEMENT)

正数的反码与原码相同,负数的反码是原码除符号位的所有位取反。

补码表示(2’S COMPLEMENT)

正数的原码、反码、补码相同;负数的补码等于反码加1,负数的原码与补码之间的相互转化关系均为除了符号位取反再加1。

补码的好处在于加减运算不需要判断符号位。B-A=B+(-A),-A的补码是A的补码所有位取反再加1

三种数制之间转换关系

正数原码、反码、补码相同;
负数补码为原码除符号位取反加1;
相反数数补码转换为所有位取反加1.

VERILOG中的常量类型



verilog中常量编译为二进制,均为补码(整数与原码相同,负数为除符号为取反加1)

在verilog中声明端口或者信号时,默认是无符号数,

wire [7:0] number;reg [7:0] number;
  • 1
  • 2

转换为十进制为

[color=rgba(0, 0, 0, 0.75)]D=∑i=0B−1ai2i�=∑�=0�−1��2�


如果需要指定为有符号数,需要特殊声明,则在硬件底层的二进制数均为补码形式

wire signed [7:0] number;reg signed [7:0] number;
  • 1
  • 2

转换为十进制为

[color=rgba(0, 0, 0, 0.75)]D=∑i=0B−1ai2i−2B×aB−1�=∑�=0�−1��2�−2�×��−1


在verilog2001中可以特别地用’s来声明符号数,比如-4表示成一个3bit十六进制数位-3’sh4。[color=rgba(0, 0, 0, 0.75)]
十进制的数永远都是有符号数.

 楼主| gaochy1126 发表于 2023-5-29 14:37 | 显示全部楼层
比如产生一个三角波,无符号8bit能产生0-255之间的数
  1. module counter(
  2.     clk,
  3.     rst,

  4.     out,
  5.     );

  6. input clk;    //clk
  7. input rst;    //reset, high active

  8. output reg [7:0] out;

  9. reg [7:0] cnt;
  10. reg state;

  11. always @(posedge clk or posedge rst) begin
  12.     if (rst) begin
  13.         cnt <= 0;
  14.         state <= 1'b0;
  15.     end
  16.     else begin
  17.         case(state)
  18.             1'b0: begin
  19.                 if(cnt==255) begin
  20.                     cnt <= cnt;
  21.                     state <= 1'b1;
  22.                 end
  23.                 else begin
  24.                     cnt <= cnt+1;
  25.                     state <= 1'b0;
  26.                 end
  27.             end
  28.             1'b1: begin
  29.                  if(cnt==0) begin
  30.                     cnt <= cnt;
  31.                     state <= 1'b0;
  32.                 end
  33.                 else begin
  34.                     cnt <= cnt-1;
  35.                     state <= 1'b1;
  36.                 end
  37.             end
  38.         endcase
  39.     end
  40. end

  41. always @(posedge clk or posedge rst) begin
  42.     if (rst) begin
  43.         out <= 0;    // reset
  44.     end
  45.     else
  46.         out <= cnt;
  47. end

  48. endmodule


 楼主| gaochy1126 发表于 2023-5-29 14:37 | 显示全部楼层
一个有符号的8bit三角波发生器
  1. module signed_counter(
  2.     clk,
  3.     rst,

  4.     out,
  5.     );

  6. input clk;    //clk
  7. input rst;    //reset, high active

  8. output reg signed [7:0] out;

  9. reg signed [7:0] cnt;
  10. reg state;

  11. always @(posedge clk or posedge rst) begin
  12.     if (rst) begin
  13.         cnt <= -128;
  14.         state <= 1'b0;
  15.     end
  16.     else begin
  17.         case(state)
  18.             1'b0: begin
  19.                 if(cnt==127) begin
  20.                     cnt <= cnt;
  21.                     state <= 1'b1;
  22.                 end
  23.                 else begin
  24.                     cnt <= cnt+1;
  25.                     state <= 1'b0;
  26.                 end
  27.             end
  28.             1'b1: begin
  29.                  if(cnt==-128) begin
  30.                     cnt <= cnt;
  31.                     state <= 1'b0;
  32.                 end
  33.                 else begin
  34.                     cnt <= cnt-1;
  35.                     state <= 1'b1;
  36.                 end
  37.             end
  38.         endcase
  39.     end
  40. end

  41. always @(posedge clk or posedge rst) begin
  42.     if (rst) begin
  43.         out <= -128;    // reset
  44.     end
  45.     else
  46.         out <= cnt;
  47. end

  48. endmodule


 楼主| gaochy1126 发表于 2023-5-29 14:38 | 显示全部楼层

可以看到输出是从8’b1000_0001(-8d’127)到8’b0000_0000(8d’127)这样的补码形式变化的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1205

主题

11937

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部