自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 手撕代码verilog-剔除最大最小值并求累加

剔除最大最小值并求累加有一个模块,vaild会连续拉高,同时有16bit数据进来,vaild连续拉高的周期数为3-255,然后要把这些数据求和,但是要把最大和最小的数剔除,最后done和sum一起输出。// 去掉一个最大值和一个最小值,剩下的值求和module sum(input clk,input rst_n,input valid,input [15:0] data,output [23:0] sum_out,output done);reg [15:0] max, min;r

2020-09-13 22:40:42 4212 8

原创 手撕代码verilog-任意整数分频

手撕代码verilog-任意整数分频(1)可实现奇数分频和偶数分频,占空比非50%;(2)可实现奇数分频和偶数分频,占空比50%;(1)// 奇数 或 偶数分频;占空比非百分之50module oddevendiv(input clk,input rst_n,input [7:0] div_number,output reg clk_out);// 在 N-1 时,cnt归零;// 在 (N-1)>>1 时, clk_out 反转reg [7:0] cnt;alwa

2020-09-13 20:06:42 827

原创 生成01011011101111序列

生成01011011101111序列(1)用移位寄存器(2)用状态机;每个状态产生一个数据// 生成序列01011110……module genseq(input clk,input rst_n,output reg seq);parameter s0=4'h0, s1=4'h1, s2=4'h2,s3=4'h3, s4=4'h4, s5=4'h5, s6=4'h6, s7=4'h7, s8=4'h8, s9=4'h9, s10=4'ha, s11=4'hb, s12=4'hc, s1

2020-09-12 22:31:35 1138

原创 用Verilog HDL设计曼切斯特编码器

用Verilog HDL设计曼切斯特编码器曼切斯特码:为一种时钟同步的编码技术,被物理层用来同步一个位流的时钟和数据,编码的规则为用01两位码表示0码,用10两位码表示1,用一个周期的正负对称方波来表0,反相波形为1;E.G.Thomas规定1为高跳变到底,0为底跳变到高。IEEE802.4规定1为低跳变到高,0为高跳变到低。`参考https://blog.csdn.net/qq_41844618/article/details/107569177// 10代表0,01代表1// clk是 曼

2020-09-12 22:03:17 2032 1

原创 仲裁器A优先级最高,BC优先级相同

// A 优先级最高,B C优先级相同// 先查询A,再按照上次grant顺序,查B或C;module arbiter2(input clk,input rst_n,input [2:0] req, // [A,B,C]output [2:0] grant);always@(posedge clk or negedge rst_n)if(!rst_n)grant<=3’b000;else case(grant)3’b000: if(req[2]) grant<=3’b100

2020-09-11 21:56:58 598

原创 round仲裁器(优先级相同)verilog

// 优先等级一样的仲裁器// 4 个申请// 思路:根据上一次的grant结果,循环查找// module round_arbiter(input clk,input rst_n,input [3:0] req, // 4个申请output reg [3:0] grant ); // 4个赋值always@(posedge clk or negedge rst_n)if(!rst_n) grant<=4'b0;else case(grant) 4'b0000: if(.

2020-09-11 21:11:04 2422

原创 verilog实现冒泡法排序

verilog实现冒泡法排序// 冒泡法排序 用verilog实现module sort( input clk, input rst_n, input [3:0] data0,data1,data2,data3,data4,data5,data6,data7,data8,data9, input load, output complete// output reg [3:0] data_out0,data_out1,data_out2,data_out3,data_out4,data_ou

2020-08-18 16:02:52 8304 2

原创 用Verilog实现寻找第一个1和最后一个1的位置

用Verilog实现寻找数据 第一个1和最后一个1的位置寻找数据中的第一个1的位置// find fist onemodule find_ones(input [7:0] x,output [2:0] y);wire [3:0] data_4;wire [1:0] data_2;assign y[2] = | x[7:4];assign data_4= y[2] ? x[7:4] : x[3:0] ;assign y[1] = | data_4[3:2];assign data_

2020-08-18 12:59:44 13004 3

原创 脉冲同步器

跨时钟域处理中,单比特脉冲,由快时钟域到慢时钟域可用脉冲同步器;// 脉冲同步器// 输入高电平,寄存器内容反转,输入低电平寄存器保持不变;module pulse_syn1(input clk1,input clk2,input rst_n,input p_in,output p_out);reg p;reg p0, p1, p2;always@(posedge clk1 or negedge rst_n) if(!rst_n) p<=0; else if(p_i

2020-08-02 16:50:43 1064

原创 单端口和双单口RAM的实现

单端口和双单口RAM的verilog实现概念:1 单端口:读写数据共用一个地址线,一个时钟沿只能进行读或者写;2 伪双端口:写数据和读数据有自己的 地址、时钟、读写使能信号;也就是一组端口只能写,一组端口只能读。(读写数据也可共用一个clk,为同步伪双端口ram)3 真双端口:一组端口可读可写,另一组端口也可读可写。(若这两组端口共用一个clk,为同步真双端口ram。若每组有每组的clk,为异步真双端口ram)(1)单端口verilog实现//单端口rammodule ramsingle(

2020-06-20 20:40:17 3291 6

原创 用Verilog实现时钟切换电路

用Verilog实现glitch free时钟切换电路。输入sel,clka,clkb,sel 为0输出clka,sel为1输出clkb。注意:1 保持时钟完整性才能切换;所以添加的时钟使能信号在各自时钟的上升沿触发切换。2 两时钟使能信号不能同时有效,故,对方不使能自己才能使能(弊端:空等一个周期)verilog如下//输入sel,clka,clkb,sel 为0输出clka,sel为1输出clkb。module selclk2( input clka, input clkb, inpu

2020-06-20 12:37:05 3192 1

原创 Verilog实现按键抖动消除电路

用Verilog实现按键抖动消除电路,抖动小于15ms,输入时钟 12MHz添加计数器,计数时间为15ms。若这段时间key_in保持不变,则key_in连接输出。若计数到中间,输入有变化,则重新计时。(若未给出抖动时间,按经验,抖动时间一般会少于20ms. 也就是说,如果数据稳定20ms,认为可以采集该数据。)参考原文链接:https://blog.csdn.net/Reborn_Lee/article/details/89927569按键按下后计数多少后,采样按键值,这个需要简单的运算:输入时

2020-06-20 11:54:35 7720 1

原创 串并转换verilog

串并转换verilogverilog如下//串并转换//串转并module serial2parallel( input clk, input rst_n, input datain, input shift_en, input load, output reg [15:0] dataout); reg [15:0] shiftr;//串转并always@(posedge clk) if(!rst_n) shiftr<=0; else if(shift_en) s

2020-06-14 17:04:19 3645

原创 跨时钟域单比特脉冲同步

跨时钟## 标题域 单比特 脉冲 同步用两级同步器同步,由快时钟域向慢时钟域传输的时候clk_b有可能采样不到clk_a传输过来的信号。参考原文https://blog.csdn.net/MaoChuangAn/article/details/89917930引用“下面是更常见的,clka下的脉冲信号,同步到clkb时钟域下,它对clka与clkb的时钟频率关系没有任何限制,快到慢,慢到快都没有问题。其主要的原理就是先把脉冲信号在clka下展宽,变成电平信号,再向clkb传递,当确认clkb已经“看见

2020-06-14 16:08:49 1177

原创 乐鑫笔试2

三、设计一个自动饮料售卖机,共有两种饮料,其中饮料A每个10分钱,饮料B每个5分钱,硬币有5分和10分两种,并考虑找零。要求用状态机实现,定义状态,画出状态转移图,并用Verilog完整描述该模块Verilog如下module outab( input clk, input rst_n, input [1:0] want, input [1:0] money, //2'b10: 10 cents 2'b01: 5 cents output reg [1:0] ab, //2'b10:a

2020-06-10 20:59:19 1040

原创 乐鑫笔试题1

一、将一个串行执行的C语言算法转化为单拍完成的并行可综合verilogunsigned char cal_table_high_first(unsigned char value){ unsigned char i ;unsigned char checksum = value ; for (i=8;i>0;--i) { if (check_sum & 0x80) { check_sum = (check_su

2020-06-09 22:50:45 785

原创 非整数倍分频

非整数倍倍分频占空比非50%//4.5分频module clkdivpoint ( input clk, input rst_n, output clk_out); reg [9:1] shiftr;reg shift1, shift5, shift6;always@(posedge clk) if(!rst_n) shiftr<=9'b0_0000_0001; else shiftr<={shiftr[8:1],shiftr[9]};always@(nege

2020-05-20 18:30:35 1050

原创 格雷码与二进制码转换

格雷码转二进制码二进制码转格雷码代码如下//gray to bin module gray2bin #(parameter ADDR_WIDTH=8)( input [ADDR_WIDTH-1:0] grayin, output [ADDR_WIDTH-1:0] binout, output reg [ADDR_WIDTH-1:0] binout1, output [ADDR_WIDTH-1:0] grayout );//assign binout=gray2bin(grayin)

2020-05-20 16:17:10 1264

原创 同步FIFO硬件代码

同步FIFO数据宽度、FIFO深度 可配置module synfifo #(parameter DEPTH=16, ADDR_WIDTH=4, DATA_WIDTH=8)( input clk, rst_n, rd, wr, input [DATA_WIDTH-1:0] datain, output reg [DATA_WIDTH-1:0] dataout, output reg empty, full );reg [DATA_WIDTH-1:0] mem [D

2020-05-19 18:53:58 713

原创 检测序列011011

检测序列011011module seqdet ( input clk, input rst_n, input data, output reg en);parameter idle=4'b0000, seq1=4'b0001, seq2=4'b0010, seq3=4'b0011, seq4=4'b0100, seq5=4'b0101, seq6=4'b0110;reg [3:0] state; //一段式状态机always@(posedge clk)

2020-05-18 23:53:28 1082

原创 模100 计数器

模100 计数器module counter100 #(parameter N=100, WIDTH=7)( input clk, input rst_n_a, output reg [WIDTH-1:0] counter, output reg en);always@(posedge clk or negedge rst_n_a) if(!rst_n_a) begin counter<=0; en<=0;end else if(counter==N-1) begin

2020-05-18 23:27:32 5288 1

转载 乘积项结构PLD的逻辑实现原理

乘积项结构PLD的逻辑实现原理一.基于乘积项(Product-Term)的PLD结构采用这种结构的PLD芯片有:Altera的MAX7000,MAX3000系列(EEPROM工艺),Xilinx的XC9500系列(Flash工艺)和Lattice,Cypress的大部分产品(EEPROM工艺)我们先看一下这种PLD的总体结构(以MAX7000为例,其他型号的结构与此都非常相似):图1 基...

2020-04-18 17:51:50 4300

转载 FPGA与CPLD的区别

FPGAFPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。内部基本结构为门阵列构成静态存储器(SRAM)。该SRAM可构成函数发生器,即查找表(LUT),通过查找表可实现逻辑函数功能)。FPGA逻辑单元FPGA的基本结构CPLDCPLD(Complex Programmabl...

2020-04-18 16:28:30 1089

原创 异步FIFO

一 FIFO分类1 同步FIFO:读写时钟频率相位都相同2 异步FIFO:读写时钟频率或相位不同二 异步FIFO代码如下module asynfifo #(parameter data_width=8, depth=16, addr_width=4) ( input wclk, input wresetn, input [data_width-1 : 0] dat...

2020-03-30 20:19:20 371

原创 时钟分频器

一 分频器种类1 偶数倍分频2 奇数倍分频,占空比50%3 小数分频二 奇数倍分频,占空比50%1 在clk上升沿和下降沿分别产生2n分频时钟,两时钟相位差90度。2 两时钟异或。代码如此下module clockdiv #(parameter N=11, COUNTER_WIDTH=4)( input clk, input resetn, output c...

2020-03-30 20:06:43 1144

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除