<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wangn1633的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wangn1633</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangn1633]]></copyright><item><title><![CDATA[手撕代码verilog-剔除最大最小值并求累加]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108569674</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108569674</guid><author>wangn1633</author><pubDate>Sun, 13 Sep 2020 22:40:42 +0800</pubDate><description><![CDATA[剔除最大最小值并求累加
有一个模块，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]]></description><category></category></item><item><title><![CDATA[手撕代码verilog-任意整数分频]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108567130</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108567130</guid><author>wangn1633</author><pubDate>Sun, 13 Sep 2020 20:06:42 +0800</pubDate><description><![CDATA[手撕代码verilog-任意整数分频
（1）可实现奇数分频和偶数分频，占空比非50%；
（2）可实现奇数分频和偶数分频，占空比50%；
（1）
// 奇数 或 偶数分频；占空比非百分之50

module oddevendiv(
input clk,
input rst_n,
input [7:0] div_number,
output reg clk_out);

// 在 N-1 时，cnt归零；
// 在 (N-1)&gt;&gt;1 时， clk_out 反转
reg [7:0] cnt;
alwa]]></description><category></category></item><item><title><![CDATA[生成01011011101111序列]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108556322</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108556322</guid><author>wangn1633</author><pubDate>Sat, 12 Sep 2020 22:31:35 +0800</pubDate><description><![CDATA[生成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]]></description><category></category></item><item><title><![CDATA[用Verilog HDL设计曼切斯特编码器]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108555929</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108555929</guid><author>wangn1633</author><pubDate>Sat, 12 Sep 2020 22:03:17 +0800</pubDate><description><![CDATA[用Verilog HDL设计曼切斯特编码器
曼切斯特码：为一种时钟同步的编码技术，被物理层用来同步一个位流的时钟和数据，编码的规则为用01两位码表示0码，用10两位码表示1，用一个周期的正负对称方波来表0，反相波形为1；
E.G.Thomas规定1为高跳变到底，0为底跳变到高。
IEEE802.4规定1为低跳变到高，0为高跳变到低。`
参考https://blog.youkuaiyun.com/qq_41844618/article/details/107569177

// 10代表0,01代表1
// clk是 曼]]></description><category></category></item><item><title><![CDATA[仲裁器A优先级最高，BC优先级相同]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108542448</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108542448</guid><author>wangn1633</author><pubDate>Fri, 11 Sep 2020 21:56:58 +0800</pubDate><description><![CDATA[// 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&lt;=3’b000;
else case(grant)
3’b000: if(req[2]) grant&lt;=3’b100]]></description><category></category></item><item><title><![CDATA[round仲裁器（优先级相同）verilog]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108541842</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108541842</guid><author>wangn1633</author><pubDate>Fri, 11 Sep 2020 21:11:04 +0800</pubDate><description><![CDATA[// 优先等级一样的仲裁器
// 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&lt;=4'b0;
else case(grant)
	4'b0000: if(.]]></description><category></category></item><item><title><![CDATA[verilog实现冒泡法排序]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108079421</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108079421</guid><author>wangn1633</author><pubDate>Tue, 18 Aug 2020 16:02:52 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[用Verilog实现寻找第一个1和最后一个1的位置]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/108074727</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/108074727</guid><author>wangn1633</author><pubDate>Tue, 18 Aug 2020 12:59:44 +0800</pubDate><description><![CDATA[用Verilog实现寻找数据 第一个1和最后一个1的位置
寻找数据中的第一个1的位置
// find fist one
module 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_]]></description><category></category></item><item><title><![CDATA[脉冲同步器]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/107747058</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/107747058</guid><author>wangn1633</author><pubDate>Sun, 02 Aug 2020 16:50:43 +0800</pubDate><description><![CDATA[跨时钟域处理中，单比特脉冲，由快时钟域到慢时钟域可用脉冲同步器；
// 脉冲同步器
// 输入高电平，寄存器内容反转，输入低电平寄存器保持不变；
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&lt;=0;
	else if(p_i]]></description><category></category></item><item><title><![CDATA[单端口和双单口RAM的实现]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106875876</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106875876</guid><author>wangn1633</author><pubDate>Sat, 20 Jun 2020 20:40:17 +0800</pubDate><description><![CDATA[单端口和双单口RAM的verilog实现
概念：
1 单端口：读写数据共用一个地址线，一个时钟沿只能进行读或者写；
2 伪双端口：写数据和读数据有自己的 地址、时钟、读写使能信号；也就是一组端口只能写，一组端口只能读。（读写数据也可共用一个clk，为同步伪双端口ram）
3 真双端口：一组端口可读可写，另一组端口也可读可写。（若这两组端口共用一个clk，为同步真双端口ram。若每组有每组的clk，为异步真双端口ram）
（1）单端口verilog实现
//单端口ram
module ramsingle(
	]]></description><category></category></item><item><title><![CDATA[用Verilog实现时钟切换电路]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106870764</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106870764</guid><author>wangn1633</author><pubDate>Sat, 20 Jun 2020 12:37:05 +0800</pubDate><description><![CDATA[用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]]></description><category></category></item><item><title><![CDATA[Verilog实现按键抖动消除电路]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106870239</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106870239</guid><author>wangn1633</author><pubDate>Sat, 20 Jun 2020 11:54:35 +0800</pubDate><description><![CDATA[用Verilog实现按键抖动消除电路，抖动小于15ms，输入时钟 12MHz
添加计数器，计数时间为15ms。若这段时间key_in保持不变，则key_in连接输出。若计数到中间，输入有变化，则重新计时。
（若未给出抖动时间，按经验，抖动时间一般会少于20ms. 也就是说，如果数据稳定20ms，认为可以采集该数据。）

参考原文链接：https://blog.youkuaiyun.com/Reborn_Lee/article/details/89927569
按键按下后计数多少后，采样按键值，这个需要简单的运算：输入时]]></description><category></category></item><item><title><![CDATA[串并转换verilog]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106748375</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106748375</guid><author>wangn1633</author><pubDate>Sun, 14 Jun 2020 17:04:19 +0800</pubDate><description><![CDATA[串并转换verilog
verilog如下
//串并转换
//串转并
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&lt;=0;
	else if(shift_en)
	s]]></description><category></category></item><item><title><![CDATA[跨时钟域单比特脉冲同步]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106747304</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106747304</guid><author>wangn1633</author><pubDate>Sun, 14 Jun 2020 16:08:49 +0800</pubDate><description><![CDATA[跨时钟## 标题域 单比特 脉冲 同步
用两级同步器同步，由快时钟域向慢时钟域传输的时候clk_b有可能采样不到clk_a传输过来的信号。
参考原文https://blog.youkuaiyun.com/MaoChuangAn/article/details/89917930
引用“下面是更常见的，clka下的脉冲信号，同步到clkb时钟域下，它对clka与clkb的时钟频率关系没有任何限制，快到慢，慢到快都没有问题。其主要的原理就是先把脉冲信号在clka下展宽，变成电平信号，再向clkb传递，当确认clkb已经“看见]]></description><category></category></item><item><title><![CDATA[乐鑫笔试2]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106668273</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106668273</guid><author>wangn1633</author><pubDate>Wed, 10 Jun 2020 20:59:19 +0800</pubDate><description><![CDATA[三、设计一个自动饮料售卖机，共有两种饮料，其中饮料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]]></description><category></category></item><item><title><![CDATA[乐鑫笔试题1]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106652719</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106652719</guid><author>wangn1633</author><pubDate>Tue, 09 Jun 2020 22:50:45 +0800</pubDate><description><![CDATA[一、将一个串行执行的C语言算法转化为单拍完成的并行可综合verilog
unsigned char cal_table_high_first(unsigned char value)
{
	unsigned char i ;
unsigned  char checksum = value ; 
    for (i=8;i&gt;0;--i)
    {
        if (check_sum &amp; 0x80)
        {
            check_sum = (check_su]]></description><category></category></item><item><title><![CDATA[非整数倍分频]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106242027</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106242027</guid><author>wangn1633</author><pubDate>Wed, 20 May 2020 18:30:35 +0800</pubDate><description><![CDATA[非整数倍倍分频
占空比非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&lt;=9'b0_0000_0001;
	else shiftr&lt;={shiftr[8:1],shiftr[9]};


always@(nege]]></description><category></category></item><item><title><![CDATA[格雷码与二进制码转换]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106238531</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106238531</guid><author>wangn1633</author><pubDate>Wed, 20 May 2020 16:17:10 +0800</pubDate><description><![CDATA[格雷码转二进制码
二进制码转格雷码
代码如下

//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)]]></description><category></category></item><item><title><![CDATA[同步FIFO硬件代码]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106220905</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106220905</guid><author>wangn1633</author><pubDate>Tue, 19 May 2020 18:53:58 +0800</pubDate><description><![CDATA[同步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]]></description><category></category></item><item><title><![CDATA[检测序列011011]]></title><link>https://blog.youkuaiyun.com/wangn1633/article/details/106204468</link><guid>https://blog.youkuaiyun.com/wangn1633/article/details/106204468</guid><author>wangn1633</author><pubDate>Mon, 18 May 2020 23:53:28 +0800</pubDate><description><![CDATA[检测序列011011
module 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)
	]]></description><category></category></item></channel></rss>