xilinx verilog语法技巧

  • 2019 年 10 月 29 日
  • 笔记

xilinx verilog语法技巧 一

硬件描述语言(HDL)编码技术让您: •描述数字逻辑电路中最常见的功能。 •充分利用Xilinx®器件的架构特性。

1 Flip-Flops and Registers :

Vivado综合根据HDL代码的编写方式推断出四种类型的寄存器原语: •FDCE:具有时钟使能和异步清除的D触发器 •FDPE:具有时钟使能和异步预设的D触发器 •FDSE:具有时钟使能和同步设置的D触发器 •FDRE:具有时钟使能和同步复位的D触发器 Register with Rising-Edge Coding Example (Verilog)

// 8-bit Register with  // Rising-edge Clock  // Active-high Synchronous Clear  // Active-high Clock Enable  // File: registers_1.v    module registers_1(d_in,ce,clk,clr,dout);  input [7:0] d_in;  input ce;  input clk;  input clr;  output [7:0] dout;  reg [7:0] d_reg;    always @ (posedge clk)  begin   if(clr)    d_reg <= 8'b0;   else if(ce)    d_reg <= d_in;  end    assign dout = d_reg;  endmodule  

2 Latches

// Latch with Positive Gate and Asynchronous Reset  // File: latches.v  module latches (  input G, input D, input CLR, output reg Q );  always @ *  begin  if(CLR) Q = 0; else if(G) Q = D;  end  endmodule  

3 Shift Registers

移位寄存器是一系列触发器,允许跨固定(静态)数量的延迟级传播数据。 相反,在动态移位寄存器中,传播链的长度在电路操作期间动态变化。 Vivado综合在SRL类资源上实现了推断的移位寄存器,例如: •SRL16E •SRLC32E 8-Bit Shift Register Coding Example One (Verilog)

// 8-bit Shift Register  // Rising edge clock  // Active high clock enable  // Concatenation-based template  // File: shift_registers_0.v  module shift_registers_0 (clk, clken, SI, SO);  parameter WIDTH = 32;  input clk, clken, SI;  output SO;  reg [WIDTH-1:0] shreg;  always @(posedge clk)  begin if (clken) shreg <= {shreg[WIDTH-2:0], SI}; end  assign SO = shreg[WIDTH-1];  endmodule  

32-Bit Shift Register Coding Example Two (Verilog)

// 32-bit Shift Register  // Rising edge clock  // Active high clock enable  // For-loop based template  // File: shift_registers_1.v  module shift_registers_1 (clk, clken, SI, SO);  parameter WIDTH = 32;  input clk, clken, SI;  output SO;  reg [WIDTH-1:0] shreg;  integer i;  always @(posedge clk)  begin  if (clken) begin for (i = 0; i < WIDTH-1; i = i+1) shreg[i+1] <= shreg[i]; shreg[0] <= SI; end  end  assign SO = shreg[WIDTH-1];  endmodule  

Dynamic Shift Registers 动态移位寄存器是移位寄存器,其长度可在电路操作期间动态变化。 动态移位寄存器可以看作: •一系列触发器,它们在电路工作期间可以接受的最大长度。 •多路复用器,在给定的时钟周期内选择从传播链中提取数据的阶段。

32-Bit Dynamic Shift Registers Coding Example (Verilog)

// 32-bit dynamic shift register.  // Download:  // File: dynamic_shift_registers_1.v  module dynamic_shift_register_1 (CLK, CE, SEL, SI, DO);  parameter SELWIDTH = 5;  input CLK, CE, SI;  input [SELWIDTH-1:0] SEL;  output DO;  localparam DATAWIDTH = 2**SELWIDTH;  reg [DATAWIDTH-1:0] data;  assign DO = data[SEL];  always @(posedge CLK)  begin if (CE == 1'b1) data <= {data[DATAWIDTH-2:0], SI}; end  endmodule

verilog常用语法一让您的FPGA设计更轻松

verilog常用语法二让您的FPGA设计更轻松

verilog常用语法三让您的FPGA设计更轻松

xilinx verilog 语法技巧–综合属性