硬件描述语言(HDL)编码技术:xilinx verilog语法技巧

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 else if(ce)
d_reg 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 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 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 endmodule


热管式空预器的工作原理以及其优缺点解析
工业互联网生而联接工业要素
基于FPGA的高速PCB的设计
orcad产生Cadence Allegro的网表操作步骤
直通HDC2022 | 润和软件荣获“华为开发者联盟 2022年度最佳生态服务商奖”
硬件描述语言(HDL)编码技术:xilinx verilog语法技巧
未来LED显示有望成长为万亿级的大市场
光刻机巨头ASML将在中国台湾建立海外首个培训中心
IMU和AHRS之间的区别
无线遥控多功能防盗器
OFDMA传输的上下链路,EVM以及如何克服测试难点
人工智能医学影像联合实验室成立,运用到食管癌早筛试验上
Gen4内卷新高度——致态TiPlus7100
安森美半导体的全局快门图像传感器解决机器视觉的成像需求
新短波红外传感器像素间距创下1.82µm记录
工业化设备人机界面解决方案
Pasternack推现场可更换射频连接器,满足可靠性和高频性能应用需求
新突思全新触控技术获蓝天电脑支持
射频电路板ADS仿真的意义
1000W立体声音频放大器电路设计