没有合适的资源?快使用搜索试试~ 我知道了~
基于APB总线的SM4密码协处理器实现(附Verilog代码)
需积分: 5 9 下载量 91 浏览量
2023-12-21
16:45:25
上传
评论
收藏 37KB DOCX 举报
温馨提示
试读
15页
本文使用Verilog语言实现SM4加密协处理器: 使用Verilog完成XTEA/AES/SM4/MD5/SHA-1基本模块; 定义所需寄存器,添加APB总线接口,完成兼容APB总线的SM4协处理器设计;
资源推荐
资源详情
资源评论
1 / 15
代码部分
APB_slave 模块 HDL:
module apb_slave(
input PSELx,//片选输入端,用于在通讯时选择从设备
input PENABLE,//使能端,用来指示一次 APB 传输的第二个时钟周期
input [31:0] PADDR,//总线地址输入
input PWRITE,//APB 写指令信号,高电平为写,低电平为读
input PRESETN,//APB 总线复位信号,低电平有效
input PCLK,//APB 总线时钟信号,上升沿有效
input [31:0] PWDATA,//APB 总线写数据
input [127:0] SM4_DATA,//SM4 加密后数据输入端,用来将数据存储起来,以便在
apb 总线读数据的时候输出
output reg text_isvalid_in = 1'b0,//表示明文已接收完毕,可以开始加密
output reg mk_isvalid_in = 1'b0,//表示密钥已接收完毕,可以开始加密
output reg [31:0] prdata,//总线读数据输出
output reg [127:0] DATA_i,//传输明文至 SM4
output reg [127:0] KEY); //传输密钥至 SM4
reg [31:0] key1; //密钥寄存器
reg [31:0] key2;
reg [31:0] key3;
reg [31:0] key4;
reg [31:0] data1;//明文寄存器
reg [31:0] data2;
reg [31:0] data3;
reg [31:0] data4;
reg [127:0] DATA_ENC;//密文寄存器
always@(posedge PCLK or negedge PRESETN)
begin
if(!PRESETN)//复位
基于 APB 总线的 SM4 密码协处理
器实现
2 / 15
begin
data1<=32'h0;
data2<=32'h0;
data3<=32'h0;
data4<=32'h0;
key1<= 32'h0;
key2<= 32'h0;
key3<= 32'h0;
key4<= 32'h0;
prdata<=32'h0000_0000;
end
else if(PSELx&&PENABLE&&PWRITE)//写数据
begin
case(PADDR[7:0])
8'h00:data1<=PWDATA;
8'h04:data2<=PWDATA;
8'h08:data3<=PWDATA;
8'h0c:
begin
data4<=PWDATA;
text_isvalid_in = 1'b1;//明文已经写入完成.
end
8'h10:key1<=PWDATA;
8'h14:key2<=PWDATA;
8'h18:key3<=PWDATA;
8'h1c:
begin
key4<=PWDATA;
mk_isvalid_in = 1'b1;//密钥已经写入完成
end
endcase
end
else if (PSELx&&PENABLE&&!PWRITE)//读数据
begin
case(PADDR[7:0])
8'h0c:prdata<=DATA_ENC[31:0];
8'h08:prdata<=DATA_ENC[63:32];
3 / 15
8'h04:prdata<=DATA_ENC[95:64];
8'h00:prdata<=DATA_ENC[127:96];
endcase
end
end
always @(*) begin
if(!PRESETN)//复位
begin
KEY <= 128'h0;
DATA_i <= 128'h0;
end
else if(text_isvalid_in&&mk_isvalid_in) begin
KEY <= {key1,key2,key3,key4};
DATA_i <= {data1,data2,data3,data4};
end
end
always @(SM4_DATA) DATA_ENC <= SM4_DATA;
endmodule
顶层模块 HDL:
module top_level(
input PSELx,
input PENABLE,
input [31:0] PADDR,
input PWRITE,
input PRESETN,
input PCLK,
input [31:0] PWDATA,
output [31:0] prdata);
wire [127:0] KEY;
wire [127:0] DATA_i;
wire [127:0] SM4_DATA;
剩余14页未读,继续阅读
资源评论
TaiBai-let
- 粉丝: 158
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功