SOPC课程设计实验报告--基于 NIOS 的 μCOS-II 实验
- 格式:pdf
- 大小:1.33 MB
- 文档页数:9
sopc实验心得
在进行SOPC(系统级可编程器件)实验的过程中,我深刻体会到了它的强大和灵活性。
SOPC是一种基于现场可编程门阵列(FPGA)技术的系统设计方法,它将硬件与软件相结合,可以实现高度集成和可重构的设计。
在实验中,我首先学习了SOPC的基本概念和原理,了解了它的组成部分以及各个组件之间的连接方式。
然后,我利用Quartus II软件进行了仿真和综合,将设计的硬件描述语言(HDL)代码转化为FPGA可以理解的形式。
通过仿真,我可以预先验证设计的正确性,并对其进行修改和优化。
接着,我进行了FPGA的编程和配置,将设计好的逻辑电路加载到FPGA芯片中。
通过这一步骤,我可以将自己的设计直接在硬件上实现,并进行实时的测试和调试。
这种即时性和灵活性是SOPC的一个重要优点,它使得我们能够更加高效地进行系统级设计和验证。
在SOPC实验中,我还学习了使用Nios II软核处理器进行嵌入式系统设计。
Nios II是一款可编程的32位RISC处理器,可以根据需求进行定制和配置。
通过Nios II,我可以在FPGA上实现复杂的嵌入式系统,并编写C语言程序进行控制和操作。
总的来说,SOPC实验让我深入了解了系统级可编程器件的原理和应用。
通过实践,我学会了使用Quartus II软件进行FPGA设计和配置,掌握了硬件描述语言
和嵌入式系统的开发方法。
这些知识和技能对我未来的学习和工作都具有重要的意义,我相信在不久的将来,SOPC技术将会在各个领域得到广泛应用。
《SOPC技术》课程实验报告姓名:学号:班级:同组者:指导教师:高金定信息科学与工程学院2013-2014学年第一学期《SOPC技术》课程实验报告学生姓名:所在班级:指导教师:高金定老师记分及评价:一、实验名称实验1:基于LPM的正弦信号发生器的设计二、任务及要求【任务】在QuartusII平台上,采用查找表的设计方法,利用LPM兆功能模块,完成64点(8位)的正弦信号发生器的设计。
正弦信号发生器结构框图如下:【要求】1.数据存储ROM和地址信号发生器均由LPM模块实现。
2.在Quartus II软件上进行时序仿真。
3.利用Signal Tap II嵌入式逻辑分析仪进行在线测试与分析。
(此步需使用实验箱,并且要确保实验箱与电脑处于在线可下载状态)【思考】1.编写DAC0832数模转换程序,利用示波器观察输出信号波形。
2.如何在此基础上设计方波、三角波等信号发生器?如何实现波形幅度等参数可调?三、实验程序(原理图)四、仿真及结果分析五、硬件验证1、选择模式:2、引脚锁定情况表:六、小结《SOPC技术》课程实验报告学生姓名:所在班级:指导教师:高金定老师记分及评价:一、实验名称实验2:基于DSP Builder正弦信号发生器的设计二、任务及要求【任务】采用DSP Builder系统建模的方法,设计正弦信号发生器,要求采用查找表的方法,完成正弦信号发生器模块的建模、仿真。
Signal Compiler【要求】:1.完成模型构建及仿真,得到如下波形图。
2.将模型转换成VHDL硬件描述语言,利用Modelsim软件进行RTL仿真。
3.再在Quartus II软件上进行编译、时序仿真与时序分析。
4.利用Signal Tap II嵌入式逻辑分析仪进行在线测试与分析。
(此步需使用实验箱,并且要确保实验箱与电脑处于在线可下载状态)三、仿真模型及参数四、仿真及结果分析五、小结《SOPC技术》课程实验报告学生姓名:所在班级:指导教师:高金定老师记分及评价:一、实验名称实验3:基于DSP Builder的FIR数字低通滤波器的设计二、任务及要求【任务】:调用DSP Builder模块,设计FIR低通数字滤波器,完成建模与仿真。
黑龙江科技大学SOPC设计基础实验报告学院:黑龙江科技大学学号: ********** 姓名:实验一开发软件使用练习一实验目的实验目的:掌握基于SOPC硬核处理器的设计流程。
二实验设备安装Quartu II的PC、实验箱三实验内容1 添加SOPC硬核1,.创建一个工程,取名。
2.添加.bdf文件,取名和工程名同名。
3.在Tools菜单下打开SOPC Builder。
4.创建系统,取名NIOS2,选择使用Verilog语言。
5.设置系统主频和指定FPGA。
6.加入NIOS2 CPU模块,选择型号,并设置相关参数。
7.依次添加定时器、Butoon PIO、LCD控制器、外部RAM和Flash接口、外部RAM和Flash总线、JTAG UART接口,并将这些模块命名成自己熟悉的名字。
8.分配IP模块的地址和中断号9.配置NIOS2 系统10.生成NIOS2并加入到工程中2 创建PLL器件由于Sdram的时钟是由fpga提供的,所以要创建一个PLL器件来实现对时钟的控制,Quartus II提供了Megawizard Plug-In Manager工具对Plug-In器件以及IP Core进行创建和管理,在Megawizard Plug-In Manager中可以创建各种逻辑门电路以及存储器件。
选择Tools/Megawizard Plug-In Manager点击“Next”,进入Manager,选择“IO/ALTPLL”,选择输出文件类型为“VHDL”,选择输出文件的名字“mypll”点击“Next”,选择器件的速度为8,输出的频率为50MHz,其它设置不变。
点击“Next”,去掉复位、使能等选项点击“Next”,进入Clock c0的设定。
改变“Enter output clock frequency”为50MHz点击“Next”,进入Clock c1的设定,不作改变点击“Next”进入Clock e0的设定。
SOPC系统设计技术实验报告姓名:学号:院系: 信息科学与工程学院专业:电子科学与技术指导老师:完成日期: 2015年04月25日实验二、NIOSII实现串口收发数据及LCD显示一、实验目的(1)进一步熟悉Quartus II、SOPC Builder、NIOS II IDE的操作;(2)掌握SOPC硬件系统及NIOS II软件的开发流程。
二、实验内容(1)、实验平台:硬件:PC级、SmartSOPC+教学实验开发平台;软件:Quartus II 9.0,SOPC Builder 9.0, NIOS II IDE 9.0。
(2)、实验内容:建立包含SDRAM、JTAG_UART、Timer、LCD的NIOS II处理器系统,通过JTAG_UART从IDE的控制端窗口读取输入值N,计算1至N的累加值,并将计算结果及计算花费时间的显示在LCD中。
三、实验步骤3.1硬件设计根据实验内容,可以得出本次实验的硬件结构图如图3.1所示:图3.1 硬件设计结构图具体硬件设计步骤如下:1)、在Quartus II中建立一个工程命名为:smallCore,器件设置为EP3C55F484C8;2)、以原理图输入方式建立空白顶层模块,并保持;3)、打开SOPC Builder,命名SOPC系统名称为nios2system,开始建立NIOS II系统。
4)、双击SOPC Builder主界面左侧中的“Nios II Processor”,出现Nios II CPU的配置向导对话框,如图1.4所示,在这里可以有三种Nios II CPU选择,我们选择快速型的Nios II/f,不使用硬件乘法器及除法器。
然后单击Next进入下一步配置;Instruction Cache项中选择2 Kbytes,在Data Cache项中选择512 Bytes,单击Next进行下一步配置;在“Advanced Features”和“MMU and MPU Settings”选项卡中选择默认参数,然后单击Next,到了“JTAG Debug Module”选项卡,如图1.6所示。
SOPC课程设计实验报告基于SOPC的警示灯设计2013电子信息工程3班李婕20134557罗丹妮20134563一、设计目的1、熟悉掌握SOPC的基本流程2、设计一个警示灯并满足基本要求3、通过设计发现问题并解决二、设计设备1、硬件:PC机、SOPC-NIOS II EDA/SOPC系统开发平台2、软件:QUARTUS II、SOPC Builder、NIOS II ID E三、设计内容•初始状态为红灯(LED2)熄灭,绿灯(LED1)点亮,数码管显示为0。
•当按键按下,红灯(LED2)闪烁,绿灯(LED1)熄灭,同时蜂鸣器响起,数码管开始倒计时9S,此状态持续时间为9s。
•9s后,恢复初始状态。
四、设计步骤1、使用Quartus II建立一个工程文件和顶层文件;2、使用SOPC Builder建立一个简单Nios II硬件系统1)启动SOPC Builder2)指定目标FPGA3)添加NiosII内核及其他外设A、添加NiosII、SRAM、JTAG-UART、Avalon总线的I P核B、添加一个2位的输入型PIO作为按键keyC、添加两个1位的输出型PIO作为 led1及led2的输出端口D、添加一个1位的输出型PIO作为蜂鸣器的输入端口AE、添加一个3位的输出型PIO作为数码管的位选selF、添加一个8位的输出型PIO作为数码管的段选dat4)指定基地址和中断优先级5)设置NiosII复位和异常地址6) 编译生成NiosII系统SOPC Builder行程图如下:3、在Quartus II中建立一个蜂鸣器1)用VHDL语言编写蜂鸣器程序2)编译成功后Creat symbol,生成Project sing4、在Quartus II中编译Nios II硬件系统并生成配置文件1)在Quartus II加入Nios II系统符号到顶层文件2)给各端口加入输入输出引脚,并重命名3)设置参数4)编译顶层文件5)分配管脚6)再次编译5、在Nios II IDE中建立C/C++工程,编写用户程序6、编译用户程序7、下载.SOF至FPGA,运行程序,观察结果五、设计程序蜂鸣器程序(VHDL):LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sing1 ISPORT(CLK:IN STD_LOGIC;p:IN STD_LOGIC;-- DIGIT:BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0);SPEAKER:OUT STD_LOGIC);END ENTITY;ARCHITECTURE SONG OF sing1 ISSIGNAL DRIVER,ORIGIN:STD_LOGIC_VECTOR(12 DOWNTO 0); SIGNAL COUNTER:INTEGER RANGE 0 TO 140;SIGNAL COUNTER1:INTEGER RANGE 0 TO 3;SIGNAL COUNTER2:INTEGER RANGE 1 TO 10000000; SIGNAL DIGIT :STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL COUNT :STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL CARRIER,CLK_4MHZ,CLK_4HZ:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENIF COUNTER1=1 THEN CLK_4MHZ<='1';COUNTER1<=2;ELSIF COUNTER1=3 THEN CLK_4MHZ<='0';COUNTER1<=0;ELSE COUNTER1<=COUNTER1+1;END IF;IF COUNTER2=5000000 THEN CLK_4HZ<='1';COUNTER2<=5000001;ELSIF COUNTER2=10000000 THEN CLK_4HZ<='0';COUNTER2<=1;ELSE COUNTER2<=COUNTER2+1;END IF;END IF;END PROCESS;PROCESS(CLK_4MHZ)BEGINIF CLK_4MHZ'EVENT AND CLK_4MHZ='1' THEN IF DRIVER="1111111111111"THENCARRIER<='1';DRIVER<=ORIGIN;ELSEDRIVER<=DRIVER+1;CARRIER<='0';END IF;END IF;END PROCESS;PROCESS(CARRIER)BEGINif(p='1')thenIF CARRIER'EVENT AND CARRIER='1' THEN COUNT<=COUNT+1;IF COUNT="00"THENSPEAKER<='1';ELSESPEAKER<='0';END IF;END IF;end if;END PROCESS;PROCESS(CLK_4HZ)BEGINIF CLK_4HZ'EVENT AND CLK_4HZ='1' THEN IF COUNTER=140 THENCOUNTER<=0;ELSE COUNTER<=COUNTER+1;END IF;END IF;CASE COUNTER ISWHEN 2 =>DIGIT<="0000011"; WHEN 3 =>DIGIT<="0000011"; WHEN 4 =>DIGIT<="0000101"; WHEN 5 =>DIGIT<="0000101"; WHEN 6 =>DIGIT<="0000101"; WHEN 7 =>DIGIT<="0000110"; WHEN 8 =>DIGIT<="0001000"; WHEN 9 =>DIGIT<="0001000"; WHEN 10 =>DIGIT<="0001000"; WHEN 11 =>DIGIT<="0010000"; WHEN 12 =>DIGIT<="0000110"; WHEN 13 =>DIGIT<="0001000"; WHEN 14 =>DIGIT<="0000101"; WHEN 15 =>DIGIT<="0000101"; WHEN 16 =>DIGIT<="0101000"; WHEN 17 =>DIGIT<="0101000"; WHEN 18 =>DIGIT<="0101000"; WHEN 19 =>DIGIT<="1000000"; WHEN 20 =>DIGIT<="0110000"; WHEN 21 =>DIGIT<="0101000"; WHEN 22 =>DIGIT<="0011000"; WHEN 23 =>DIGIT<="0101000"; WHEN 24 =>DIGIT<="0010000"; WHEN 25 =>DIGIT<="0010000"; WHEN 26 =>DIGIT<="0010000"; WHEN 27 =>DIGIT<="0010000"; WHEN 28 =>DIGIT<="0010000"; WHEN 29 =>DIGIT<="0010000"; WHEN 30 =>DIGIT<="0000011"; WHEN 31 =>DIGIT<="0000000"; WHEN 32 =>DIGIT<="0010000"; WHEN 33 =>DIGIT<="0010000"; WHEN 34 =>DIGIT<="0010000"; WHEN 35 =>DIGIT<="0011000"; WHEN 36 =>DIGIT<="0000111"; WHEN 37 =>DIGIT<="0000111"; WHEN 38 =>DIGIT<="0000110"; WHEN 39 =>DIGIT<="0000110"; WHEN 40 =>DIGIT<="0000101"; WHEN 41 =>DIGIT<="0000101"; WHEN 42 =>DIGIT<="0000101"; WHEN 43 =>DIGIT<="0000110";WHEN 46 =>DIGIT<="0010000"; WHEN 47 =>DIGIT<="0010000"; WHEN 48 =>DIGIT<="0000011"; WHEN 49 =>DIGIT<="0000011"; WHEN 50 =>DIGIT<="0001000"; WHEN 51 =>DIGIT<="0001000"; WHEN 52 =>DIGIT<="0000110"; WHEN 53 =>DIGIT<="0000101"; WHEN 54 =>DIGIT<="0000110"; WHEN 55 =>DIGIT<="0001000"; WHEN 56 =>DIGIT<="0000101"; WHEN 57 =>DIGIT<="0000101"; WHEN 58 =>DIGIT<="0000101"; WHEN 59 =>DIGIT<="0000101"; WHEN 60 =>DIGIT<="0000101"; WHEN 61 =>DIGIT<="0000101"; WHEN 62 =>DIGIT<="0000101"; WHEN 63 =>DIGIT<="0000101"; WHEN 64 =>DIGIT<="0011000"; WHEN 65 =>DIGIT<="0011000"; WHEN 66 =>DIGIT<="0011000"; WHEN 67 =>DIGIT<="0101000"; WHEN 68 =>DIGIT<="0000111"; WHEN 69 =>DIGIT<="0000111"; WHEN 70 =>DIGIT<="0010000"; WHEN 71 =>DIGIT<="0010000"; WHEN 72 =>DIGIT<="0000110"; WHEN 73 =>DIGIT<="0001000"; WHEN 74 =>DIGIT<="0000101"; WHEN 75 =>DIGIT<="0000101"; WHEN 76 =>DIGIT<="0000101"; WHEN 77 =>DIGIT<="0000101"; WHEN 78 =>DIGIT<="0000101"; WHEN 79 =>DIGIT<="0000101"; WHEN 80 =>DIGIT<="0000011"; WHEN 81 =>DIGIT<="0000101"; WHEN 82 =>DIGIT<="0000011"; WHEN 83 =>DIGIT<="0000011"; WHEN 84 =>DIGIT<="0000101"; WHEN 85 =>DIGIT<="0000110"; WHEN 86 =>DIGIT<="0000111"; WHEN 87 =>DIGIT<="0010000";WHEN 90 =>DIGIT<="0000110"; WHEN 91 =>DIGIT<="0000110"; WHEN 92 =>DIGIT<="0000110"; WHEN 93 =>DIGIT<="0000110"; WHEN 94 =>DIGIT<="0000101"; WHEN 95 =>DIGIT<="0000110"; WHEN 96 =>DIGIT<="0001000"; WHEN 97 =>DIGIT<="0001000"; WHEN 98 =>DIGIT<="0001000"; WHEN 99 =>DIGIT<="0010000"; WHEN 100=>DIGIT<="0101000"; WHEN 101=>DIGIT<="0101000"; WHEN 102=>DIGIT<="0101000"; WHEN 103=>DIGIT<="0011000"; WHEN 104=>DIGIT<="0010000"; WHEN 105=>DIGIT<="0010000"; WHEN 106=>DIGIT<="0011000"; WHEN 107=>DIGIT<="0010000"; WHEN 108=>DIGIT<="0001000"; WHEN 109=>DIGIT<="0001000"; WHEN 110=>DIGIT<="0000110"; WHEN 111=>DIGIT<="0000101"; WHEN 112=>DIGIT<="0000011"; WHEN 113=>DIGIT<="0000011"; WHEN 114=>DIGIT<="0000011"; WHEN 115=>DIGIT<="0000011"; WHEN 116=>DIGIT<="0001000"; WHEN 117=>DIGIT<="0001000"; WHEN 118=>DIGIT<="0000110"; WHEN 119=>DIGIT<="0001000"; WHEN 120=>DIGIT<="0000110"; WHEN 121=>DIGIT<="0000011"; WHEN 122=>DIGIT<="0000011"; WHEN 123=>DIGIT<="0010000"; WHEN 124=>DIGIT<="0000011"; WHEN 125=>DIGIT<="0000101"; WHEN 126=>DIGIT<="0000110"; WHEN 127=>DIGIT<="0001000"; WHEN 128=>DIGIT<="0000101"; WHEN 129=>DIGIT<="0000101"; WHEN 130=>DIGIT<="0000101"; WHEN 131=>DIGIT<="0000101";WHEN 134=>DIGIT<="0000101"; WHEN 135=>DIGIT<="0000101"; WHEN 136=>DIGIT<="0000000"; WHEN 137=>DIGIT<="0000000"; WHEN 138=>DIGIT<="0000000"; WHEN 139=>DIGIT<="0000000"; WHEN OTHERS=>DIGIT<="0000000";END CASE;CASE DIGIT ISWHEN "0000011"=>ORIGIN<="0100001001100";WHEN "0000101"=>ORIGIN<="0110000010001";WHEN "0000110"=>ORIGIN<="0111000111110";WHEN "0000111"=>ORIGIN<="1000000101101";WHEN "0001000"=>ORIGIN<="1000100010001";WHEN "0010000"=>ORIGIN<="1001010110010";WHEN "0011000"=>ORIGIN<="1010000100101";WHEN "0101000"=>ORIGIN<="1011000001000";WHEN "0110000"=>ORIGIN<="1011100011110";WHEN "1000000"=>ORIGIN<="1100010001000";WHEN OTHERS=>ORIGIN<="1111111111111";END CASE;END PROCESS;END SONG;警示灯总程序:#include <stdio.h>#include <sys/unistd.h>#include <io.h>#include <string.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include "sys/alt_irq.h"int num;static void Button_ISR_Init(void);static void Button_Irq_Handler(void* context,alt_u32 id);alt_u8 segtab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9段码static void display(int num);//按键初始化static void Button_ISR_Init(void){IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE,0xff); //允许8个按键中断IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0); //清除中断标志寄存器alt_irq_register(KEY_IRQ,NULL,Button_Irq_Handler); //注册中断}static void display(int num){IOWR_ALTERA_AVALON_PIO_DATA(SEL_BASE,0); //数码管位选IOWR_ALTERA_AVALON_PIO_DATA(DAT_BASE,segtab[num]); //显示倒计时usleep(1000);}/*------------------------------------------------------------------***********************按键中断处理函数*****************************-----------------------------------------------------------------*/static void Button_Irq_Handler(void* context,alt_u32 id){int i;for(i=0;i<9;i++){num=9-i;display(num);IOWR_ALTERA_AVALON_PIO_DATA(A_BASE, 1);//蜂鸣器响起IOWR_ALTERA_AVALON_PIO_DATA(LED1_BASE, 0);IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE, 1);usleep(500000);IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE, 0);usleep(500000);}IOWR_ALTERA_AVALON_PIO_DATA(A_BASE, 0);//蜂鸣器关闭IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0);num=0;display(num);}int main(void){printf("Begin!\n");Button_ISR_Init(); //按键中断初始化while(1){usleep(100000);IOWR_ALTERA_AVALON_PIO_DATA(LED1_BASE, 1);IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE, 0);num=0;display(num);}return 0;}六、设计结果按键未按下时,处于初始状态:LED1亮,LED2灭,数码管显示为0,蜂鸣器未启动;按键按下之后,LED1灭,LED2闪烁,数码管进入9秒倒计时并且蜂鸣器响;9秒后恢复初始状态。
基于NiosⅡ的SOPC系统设计与研究的开题报告一、选题背景及意义SOPC(System-on-a-Programmable-Chip,可编程芯片系统)是一种新的系统设计方法,其核心是将CPU、DSP、FPGA等各种数字电路系统的设计集成到一个单一的可编程处理器芯片中,这种设计方法在数字电路领域中具有非常广泛的应用前景和研究价值。
而在这种系统设计方法中,Nios Ⅱ是基于可编程逻辑设备的嵌入式处理器,具有易于设计与控制、可裁剪性强、资源占用小等优点,广泛应用于SOPC系统的设计与实现之中。
因此,本次选题旨在通过对于Nios Ⅱ的SOPC系统设计与研究进行深入探索,探究其在实际应用中的优势与不足之处,为其进一步的优化和完善提供参考依据。
二、研究方法及流程1、资料收集:在本研究中,需要深入了解Nios Ⅱ处理器的内部结构与工作原理、SOPC系统的设计与构建过程、各种数字电路模块的实现方法等相关资料,并进行整理和分析。
2、系统设计:在收集和分析相关资料的基础上,进行简化的Nios Ⅱ处理器设计和SOPC系统架构设计,并利用Quartus II工具进行系统实现和验证。
3、系统测试:完成系统的实现之后,进行系统测试,包括硬件实验和软件编程测试两个方面。
4、分析评估:分析实验数据,评估Nios Ⅱ的SOPC系统在实际应用中的性能优劣,提出系统的改进和优化方案。
三、预期结果及意义1、在实验设计过程中,通过对Nios Ⅱ的SOPC系统架构设计与实现,可以深刻理解可编程处理器芯片中各种数字电路模块的工作原理与相互联接关系,彻底掌握SOPC系统的设计与构建方法。
2、通过实验测试和数据分析,可以全面评估Nios Ⅱ的SOPC系统在实际应用中的性能优劣,研究其应用前景和推广价值,并针对其不足之处提出系统的改进和优化方案,提高系统的性能水平和可靠性。
3、研究成果可为相关技术研究和应用推广提供科学依据和参考借鉴,促进数字电路领域技术的创新和发展。
基于NiosⅡ的U盘安全控制器设计与实现杨献超,苏锦海,张立朝摘要:针对U盘等存储设备的安全隐患及用户的安全需求,分析目前常见的解决方法,遵循灵活方便、高安全性的原则,利用SoPC技术,设计实现了一款基于NiosⅡ的U盘安全控制器。
详细论述了安全控制器的系统设计、硬件架构、固件划分和工作流程。
采用高强度的密码算法,对普通U盘中的数据进行扇区级的加解密,保证U盘中数据的安全,具有灵活安全、易于升级的特点。
关键词: U盘;USB主机;NiosⅡ;安全控制器目前,U盘等USB移动存储载体由于其容量大、价格低、携带方便、可靠性高等优点,得到了越来越广泛的应用,在生活、工作中随处可见。
然而,USB移动存储载体的便利性及其自身安全脆弱性的矛盾十分突出。
本文针对U盘的安全隐患,分析目前较为常见的解决方法,利用SoPC技术,设计实现了一款基于Nios Ⅱ处理器的U盘安全控制器。
该控制器位于PC机和U盘之间,通过对U盘进行扇区级的加解密操作,将普通U盘升级为安全U盘,保证U盘中数据的安全性。
控制器遵循USB MassStorage类协议,无需专用驱动,即插即用,具有灵活方便、安全性高等优点[1]。
1 安全控制器的整体设计1.1 安全U盘解决方案分析U盘最为突出的安全问题是其内部所存储的数据都以明文形式存储,任何人得到该存储载体,即可对其中的数据进行任意的操作。
因此,普通U盘一旦丢失,其存储的数据则毫无安全性可言。
针对这一问题,目前已经有多种解决方法,其中较为常见、安全性较高的是采用专用安全U盘的方法。
专用安全U盘的硬件架构如图1所示,主要由微处理器、存储芯片(NandFlash)、USB模块及加解密模块等组成[2]。
当U盘和PC机进行数据传输时,加解密模块在微处理器的控制下对数据流进行加解密操作,使得U盘存储芯片中的数据都以密文形式存在。
当PC机对数据进行读写时,首先需要进行身份认证,若认证不通过,则读写操作不能进行,即使攻击者将安全U盘物理分解,直接读取存储芯片,而由于存储芯片中的数据是以密文形式存在的,攻击者也只能获得数据的密文。