verilog 大小端转换 38译码器 边沿检测 ROM 格雷码计数器_踩坑记录的博客-程序员秘密

技术标签: verilog  

大小端转换:

在这里插入图片描述


`timescale 1ns/1ns
module function_mod(
	input clk,
	input rst_n,
	input [3:0]a,
	input [3:0]b,
	
	output [3:0]c,
	output [3:0]d
);

    function [3:0]  data_rev;  // 函数名和返回变量名相同  data_rev
        input [3:0] din;  // 声明输入端口
        begin
            data_rev[0] = din[3];
            data_rev[1] = din[2];
            data_rev[2] = din[1];
            data_rev[3] = din[0];
        end      
    endfunction

    assign c = data_rev(a);  // 调用函数
    assign d = data_rev(b);
   
endmodule


38译码器

在这里插入图片描述
在这里插入图片描述


`timescale 1ns/1ns
module decoder_38(
   input             E1_n   ,
   input             E2_n   ,
   input             E3     ,
   input             A0     ,
   input             A1     ,
   input             A2     ,
   
   output wire       Y0_n   ,  
   output wire       Y1_n   , 
   output wire       Y2_n   , 
   output wire       Y3_n   , 
   output wire       Y4_n   , 
   output wire       Y5_n   , 
   output wire       Y6_n   , 
   output wire       Y7_n   
);
    wire E;
    assign E = E3 & ~E1_n & ~E2_n;   // 1&0&0 = 0
    assign  Y0_n = ~(E & ~A2 & ~A1 & ~A0);  //000
    assign  Y1_n = ~(E & ~A2 & ~A1 &  A0);  //001
    assign  Y2_n = ~(E & ~A2 &  A1 & ~A0);
    assign  Y3_n = ~(E & ~A2 &  A1 &  A0);
    assign  Y4_n = ~(E &  A2 & ~A1 & ~A0);
    assign  Y5_n = ~(E &  A2 & ~A1 &  A0);
    assign  Y6_n = ~(E &  A2 &  A1 & ~A0);
    assign  Y7_n = ~(E &  A2 &  A1 &  A0);
    
endmodule     

在这里插入图片描述


module Decoder38(data_in,data_out,enable);
    input [2:0] data_in;
     input enable;
     output [7:0] data_out;
     reg [7:0] data_out;

always @(data_in)
    begin
		if (enable == 1)
			case(data_in)
				3'b000: data_out = 8'b00000001;
				3'b001: data_out = 8'b00000010;
				3'b010: data_out = 8'b00000100;
				3'b011: data_out = 8'b00001000;
				3'b100: data_out = 8'b00010000;
				3'b101: data_out = 8'b00100000;
				3'b110: data_out = 8'b01000000;
				3'b111: data_out = 8'b10000000;
				default: data_out = 8'bxxxxxxxx;
			endcase
		else
            data_out = 8'b11111111;
     end     
         
endmodule


边沿检测:

在这里插入图片描述


`timescale 1ns/1ns
module edge_detect(
	input clk,
	input rst_n,
	input a,
	
	output reg rise,
	output reg down
);
    reg d;
    always @(posedge clk or negedge rst_n)
        if (!rst_n)
            d <= 1'b0;
        else
            d <= a;
    
    [email protected](posedge clk or negedge rst_n)begin
        if(~rst_n)begin
            rise<=1'b0; down<=1'b0;
        end
        else if(a==1 && d==0) begin
            rise <=1'b1;
            down <=1'b0;
        end
        else if(a==0 && d==1) begin
            rise <=1'b0;
            down <=1'b1;
        end
        else begin
            rise<=1'b0;
            down<=1'b0;
        end
    end
	
endmodule


ROM:

在这里插入图片描述


`timescale 1ns/1ns
module rom(
	input clk,
	input rst_n,
	input [7:0]addr,
	
	output [3:0]data
);
    reg[3:0] rom_data[7:0];  // 8个rom_data寄存器,每个4bit
    always @(posedge clk or negedge rst_n)begin
        if(~rst_n)begin  //  初始化
            rom_data[0] <= 4'd0;
            rom_data[1] <= 4'd2;
            rom_data[2] <= 4'd4;
            rom_data[3] <= 4'd6;         
            rom_data[4] <= 4'd8;
            rom_data[5] <= 4'd10;
            rom_data[6] <= 4'd12;
            rom_data[7] <= 4'd14;            
        end
        else begin   // 每个时钟周期维持数据
            rom_data[0] <= rom_data[0];
            rom_data[1] <= rom_data[1];
            rom_data[2] <= rom_data[2];
            rom_data[3] <= rom_data[3];       
            rom_data[4] <= rom_data[4];
            rom_data[5] <= rom_data[5];
            rom_data[6] <= rom_data[6];
            rom_data[7] <= rom_data[7];
        end
    end
    
    assign data =  rom_data[addr];  // 按地址输出

endmodule


格雷码计数器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


module gray_counter(
   input   clk,
   input   rst_n, 
   output  reg [3:0] gray_out
);

	//格雷码转二进制
	wire [3:0] gray_wire;  // 格雷码 wire进  一根线送进
	reg  [3:0] bin_out;    // 二进制 reg出
	always @(posedge clk or negedge rst_n)begin
	   if(~rst_n) begin
	      bin_out <= 4'b0;
	   end
	   else begin
	      bin_out[3] = gray_wire[3];
	      bin_out[2] = gray_wire[2]^bin_out[3];
	      bin_out[1] = gray_wire[1]^bin_out[2];
	      bin_out[0] = gray_wire[0]^bin_out[1];
	   end
	end
	
	//二进制加一
	reg [3:0] bin_add_wire;   // 二进制+1结果 reg出
	always @(posedge clk or negedge rst_n)begin
	   if(~rst_n) begin
	      bin_add_wire <= 4'b0;
	   end
	   else begin
	      bin_add_wire <= bin_out + 1'b1;  //  bin_out:格雷码转二进制结果
	   end
	end
	
	//二进制转格雷码
	assign gray_wire = (bin_add_wire >> 1) ^ bin_add_wire;  // 同一根线送出
	
	// 时钟上升沿到来,送进输出
	always @(posedge clk or negedge rst_n)begin
	   if(~rst_n) begin
	      gray_out <= 4'b0;
	   end
	   else begin
	      gray_out <= gray_wire;
	   end
	end

endmodule


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40456702/article/details/123372906

智能推荐

从零开始学架构5 - 实战篇_zhangbijun1230的博客-程序员秘密

从零开始学架构5 - 实战篇38 | 架构师应该如何判断技术演进的方向?潮流派? 保守派? 跟风派?技术演进的动力1)对于产品类业务,答案看起来很明显:技术创新推动业务发展!苹果开发智能手机,将诺基亚推下王座,自己成为全球手机行业的新王者。 2G 时代,UC 浏览器独创的云端架构,很好地解决了上网慢的问题;智能机时代,UC 浏览器又自主研发全新的 U3 内核,兼顾...

IAR 软件的安装教程_iar安装教程_走路去远方的博客-程序员秘密

我们再开单片机会用到很多软件比如KEIL、VS Code IAR软件等,下面我们将介绍IAR软件的安装。一、解压压缩包之后,出现如下。右键以管理员运行身份运行。最好在安装之前断开网络,和杀毒软件。不要插usb的设备。出现如下界面,选择第一项,在这里有记第一项 xxx for xxxx, for 后面会在我们破解的时候要用的 二、点击next 并接受同意安装许可。三、修改软件软件的安装目录,电脑的其他盘即可。四、选择complete选项,点击next五、弹出

iOS 网络开发NSURLConnection——使用代理方法发送异步请求_学习笔记666的博客-程序员秘密

要监听服务器返回的data,所以使用协议常见大代理方法如下:#pragma mark- NSURLConnectionDataDelegate代理方法//当接收到服务器的响应(连通了服务器)时会调用-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

学计算机对电脑配置要求高,深度学习对电脑配置的要求_架狙只打脚的博客-程序员秘密

AI开发平台ModelArtsModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。按需/包周期付费可选,最低0.00元/小时花卉识别(使用训练管理的预置算法实现图像分类)||https://support.huaweic...

ubuntu DNS修改_ubuntu dns重置_orDream的博客-程序员秘密

一、第一种方法查看DNS,cat /etc/resolv.conf能够查看DNS,这个文件是链接到ll /etc/resolv.conf# /etc/resolv.conf -&gt; /run/resolvconf/resolv.conf可见这个文件时链接到另一个文件的真实的原文件时:sudo vi /etc/resolvconf/resolv.conf....

html+css+javaScript实现炫酷烟花表白(云雾状粒子文字3D开场)[email protected]码住夏天-web网页设计的博客-程序员秘密

❉ html+css+javaScript实现炫酷烟花表白 (云雾状粒子文字3D动画自动切换,支持自定义文字动画切换特效)/ 程序员表白必备一年一度的/520情人节/七夕情人节/生日礼物/告白师妹/圣诞节/元旦节跨年/程序员表白,谁说我们程序猿不浪漫,马上要到520情人节了。当你在为女朋友买什么礼物犯愁的时候,不妨花...

随便推点

《数据结构》-第四章 串、数组和广义表(习题)_数据结构数组是考点吗_代码太难敲啊喂的博客-程序员秘密

第四章 串、数组和广义表练习题 本章考点较少易于掌握,对于串的重点考点为串的模式匹配算法;数组的主要考点为数组下标与存储地址计算和特殊矩阵的压缩存储方法;针对广义表的考点主要为在广义表中取原子项(表)的操作、求表的长度和深度。同时,应注意相关概念的区分。一、选择题 1. 串的长度是指( )。 A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数 【答案...

数据库查询主键_aijiongzhi0439的博客-程序员秘密

第一次查询主键真的不会,翻书也没有找到相关的语句,百度了好多资料才查到SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='表名';//查询哪个表只需要改表名就可以了,其它的复制粘贴转载于:https://www.cnblogs.com/caijiamin...

Bolb和URL.createObjectURL导出文件_weixin_30486037的博客-程序员秘密

&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt; &lt;meta http-equ...

Linux命令tar_weixin_33774308的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

css响应式网页设计:自适应屏幕宽度、移动页面开发技巧_css 默认网页75%大小_BraveSoul360的博客-程序员秘密

html响应式网页设计:自动适应屏幕宽度背景移动设备正超过桌面设备,成为访问互联网的最常见终端。于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页?手机的屏幕比较小,宽度通常在600像素以下;PC的屏幕宽度,一般都在1000像素以上(目前主流宽度是1366×768),有的还达到了2000像素。同样的内容,要在大小迥异的屏幕上,都呈现出满意的效果,并不是一件容易的事。...

LeetCode 208 实现 Trie (前缀树)_208. 实现 trie (前缀树)_zhaohoutao的博客-程序员秘密

实现 Trie (前缀树)struct Node { bool isWord = false; Node* child[26] = {};};class Trie { public: Node* root; /** Initialize your data structure here. */ Trie() { root = new Node(); } /**...

推荐文章

热门文章

相关标签