硬件逻辑
文章平均质量分 69
围绕FPGA相关内容,记录分享硬件逻辑的相关知识
SincX
向AI编译器方向努力
展开
-
手撕Verilog面试题专题——(13)序列模3检测
来源:https://blog.nowcoder.net/n/e4b0b3e345e04238b66489fd58f9745e题目描述:输入口是1bit,每次进来一位数据,检查当前序列是否能整除3,能则输出1,否则输出0.问题分析:首先需要找一下规律,一个数被三除,只可能会有三种情况:余数为0;余数为1;余数为2;假设当前序列表示的数是x,商为a,余数为b, 则有:3a+b=x需要注意的是:当新进来1bit数据时,实际上隐含了一个条件就是序列将被左移,也就是说如果当前序列为x,输入数据原创 2020-10-09 19:14:48 · 756 阅读 · 0 评论 -
手撕Verilog面试题专题——(12)脉冲信号的跨时钟域传输
12 单比特数据的跨时钟域传输慢时钟域到快时钟域 打两拍快时钟域到慢时钟域慢时钟域到快时钟域 打两拍Verilog代码:module BitTrans( input clkb, input rst, input din, output dout); reg [1:0] tmp; always@(posedge clkb or negedge rst) begin if(!rst) tmp <= 2'b00; else tmp <= {tmp[0],原创 2020-09-27 22:24:58 · 870 阅读 · 0 评论 -
手撕Verilog面试题专题——(11)同步FIFO
11 同步FIFO搬运工:http://www.asic-world.com/examples/verilog/syn_fifo.htmlVerilog代码:module syn_fifo ( clk , // Clock input rst , // Active high reset wr_cs , // Write chip select rd_cs , // Read chipe select data_in , // Data input rd_原创 2020-09-27 21:31:42 · 497 阅读 · 0 评论 -
手撕Verilog面试题专题——(10)按键消抖
10 按键消抖;抖动小于15ms,输入时钟12MHz参考文章:https://blog.csdn.net/Reborn_Lee/article/details/8992756915ms/(1/12Mhz) = 180000 = 0x2BF20(16)Verilog代码:module presskey( input clk, input rst, input key_in, output reg key_out); //按键本身值为1,按下原创 2020-09-27 21:30:10 · 367 阅读 · 0 评论 -
手撕Verilog面试题专题——(9)异步复位同步释放
9 异步复位同步释放Verilog代码:module arsr( // Asynchronous reset synchronous release input clk, input rst, input din, output reg dout); reg tmp; reg reset; always@(posedge clk or negedge rst) begin if(!rst) begin tmp <= 0; reset <= 0;原创 2020-09-26 17:03:33 · 424 阅读 · 0 评论 -
手撕Verilog面试题专题——(8)glitch-free的两个时钟切换电路
8 glitch-free的两个时钟切换电路有毛刺的切换电路:// 有毛刺module clkswitch( input clka, input clkb, input sel, output oclk); assign oclk = (clka & sel) || (clkb & ~sel);endmoduleclka和clkb频率成倍数关系的时候,无毛刺:// 保证成倍数的时钟源无毛刺module clkswitch( input clka, input原创 2020-09-26 16:04:44 · 507 阅读 · 2 评论 -
手撕Verilog面试题专题——(7)伪双口异步RAM
7 实现深度16、位宽8bit的伪双口异步RAM,a端口读数据,b端口写数据Verilog代码:module dpram16x8( input clka, input clkb, input rst, input cs, // port a input ren, input [3:0] addra, output [7:0] douta, // port b input wen, input [3:0] addrb, input [7:0] dinb);原创 2020-09-25 21:07:53 · 785 阅读 · 2 评论 -
手撕Verilog面试题专题——(6)占空比为50%的7分频(奇分频)
思路:用**clk上升沿**分频出“3高4低”的7分频tmp再用clk下降沿分频出“3高4低”的7分频tmp1将tmp与tmp1异或即可得到占空比50%的7分频oclkVerilog代码:module oddfreq( input clk, input rst, output oclk); reg [3:0] count; reg tmp; always @(posedge clk or negedge rst) begin if(rst) begin c原创 2020-09-25 21:06:36 · 3303 阅读 · 2 评论 -
手撕Verilog面试题专题——(5)占空比50%的偶分频
实现占空比50%的偶分频Verilog代码:module evenfreq#( parameter DivNum = 8)( input clk, input rst, output oclk); reg [DivNum:0] count; reg tmp; always @(posedge clk or negedge rst) begin if(rst) begin count <= 0; tmp <= 1'b原创 2020-09-25 20:52:52 · 290 阅读 · 0 评论 -
手撕Verilog面试题专题——(4)序列检测
4 序列检测,当输入序列中出现“10010”时输出一个脉冲信号状态转移图:Verilog代码:module seq_Detect_state( input clk, input rst, input din, output dout); reg [2:0] state; reg [2:0] nextstate; // 采用格雷码进行状态编码 parameter s0 = 3'b000; parameter s1 = 3'b001; parameter s2 = 3原创 2020-09-25 20:15:07 · 538 阅读 · 0 评论 -
手撕Verilog面试题专题——(3)串并转换
3 串并转换Verilog代码:module SerialToParallel( input clk, input rst, input din, output [7:0] dout); reg [7:0] tmp; always@(posedge clk or negedge rst) begin if(!rst) tmp <= 0; else tmp <= {tmp[6:0], din}; end assign dout = tmp;原创 2020-09-25 20:14:12 · 715 阅读 · 0 评论 -
手撕Verilog面试题专题——(2)格雷码与二进制码的相互转换
2 实现格雷码与二进制码的相互转换Verilog代码(用一个函数实现): // 定义函数 完成 二进制和格雷码的相互转换 function [WIDTH:0] data_out(input op, input [WIDTH:0] data_in); integer i; begin if(op == 1'b0) // ENCODE = 1'b0 二进制转为格雷码 data_out = (data_in >> 1) ^ data_in;原创 2020-09-25 20:12:59 · 434 阅读 · 0 评论 -
手撕Verilog面试题专题——(1)边沿检测
1 实现信号边沿检测功能,输出一个周期宽度的脉冲信号。Verilog代码:module edge_detect( input clk, input rst, input din, output dout1, //上升沿 output dout2, //上升沿 output dout3 //上升沿); reg [1:0] res; always@(posedge clk or negedge rst) begin if(!rst) res <= 2'b00;原创 2020-09-25 20:11:18 · 614 阅读 · 0 评论 -
FPGA资源介绍——可配置逻辑块CLB(三)
FPGA资源介绍——可配置逻辑块CLB(三)输入查找表(LUT6)数据选择器(MUX)进位链(Carry Chain)触发器(Flip-Flop)CLB(Configurable Logic Block)由两个Slice组成,由于Slice有SliceL(Logic)和SliceM(Memory)之分,因此CLB可分为CLBLL和CLBLM两类。SliceL和SliceM内部都包含4个6输入查找表(LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flo原创 2020-09-23 10:25:28 · 2626 阅读 · 0 评论 -
FPGA资源介绍——时钟资源(二)
FPGA资源介绍——时钟资源(二)概述全局时钟资源全局时钟资源介绍:全局时钟资源的使用方法:IBUFG+BUFGIBUFGDS+BUFGIBUFG+DCM+BUFGLogic+BUFGLogic+DCM+BUFG区域时钟区域时钟资源区域时钟的使用BUFIO的使用BUFR的使用DCM的功能和结构PLL的结构与功能MMCM的结构和功能概述Xilinx FPGA时钟包括全局时钟资源、区域时钟资源和I/O时钟资源。全局时钟:全局时钟是为所有时钟输入设计的专用互连网络,可以覆盖FPGA中的各种资源。通过使用专原创 2020-09-23 10:15:19 · 3500 阅读 · 2 评论 -
FPGA包含的资源类型(一)
FPGA有哪些资源?可编程输入输出单元(IOB)可配置逻辑块(CLB)数字时钟管理模块(DCM)嵌入式块 RAM(BRAM)丰富的布线资源底层内嵌功能单元内嵌专用硬核可编程输入输出单元(IOB)可配置逻辑块(CLB)CLB(Configurable Logic Block)由两个Slice组成,由于Slice有SliceL(Logic)和SliceM(Memory)之分,因此CLB可分为CLBLL和CLBLM两类[1]。SliceL和SliceM内部都包含4个6输入查找表(LUT6)、3个数据选择器原创 2020-09-23 10:04:53 · 3371 阅读 · 0 评论 -
FPGA中Block RAM和分布式RAM的区别?分别适用的场景是什么?
FPGA中Block RAM和分布式RAM的区别?分别适用的场景是什么?1 Block RAM2 查找表存储器——分布式RAM3 嵌入式存储器的使用方法FPGA芯片内有两种存储器资源:一种叫block ram,另一种是由LUT配置成的内部存储器(也就是分布式ram)。1 Block RAMBlock ram由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。如Xilinx公司的结构中每个BRAM有3原创 2020-09-19 17:49:43 · 10610 阅读 · 0 评论 -
二进制和格雷码的相互转换-附verilog代码及仿真结果
二进制和格雷码的相互转换二进制 格雷码 000 000 001 001 010 011 011 010 100 110 101 111 110 101 111 100(1)二进制转格雷码:原数右移一位再与原数异或(2)格雷码转二进制:二进制最高位取格雷码最高位,然后循环做二进制高位与低一位的格雷码异或verilog代码module GRAY_tb(); // 定义函数 完成 二进制和格雷码的相互转换 function [WIDTH:0] data_out(input原创 2020-09-16 19:37:38 · 1149 阅读 · 0 评论