verilog存储
A. 请教verilog存储器的读写
首先输入不用设高阻 然后一般都是DSP主动操作,FPGA没法主动往DSP里送数据,就算你送到总线上了,DSP也不知道要去读,所以还是要例化一个RAM,单双口皆可,把数据存里面等 DSP 主动来读的
B. verilog中怎样对存储器类型赋值存储器类型可不可以综合
不可以综合
按一个一个单元(字)对存储器进行赋值;或者利用$readmemb系统函数
C. verilog如何让串口发送数据并被存储到fifo
用verilog按照串口协议写一个硬件模块,再写一个fifo控制器,就可以输入到fifo中存储起来。
D. verilog中字符串怎么储存
在Verilog HDL语言有一个特殊的运算符:位拼接运算符{},用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。其使用方法如下:
即把某些倍号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号,例如:
也可以写成为:
在位拼接表达式中不允许存在没有指明位数的信号。这是因为在计算拼接信号的位宽的大小时必需知道其中每个信号的位宽。
位拼接也可以用重复法来简化表达式,如下所示:
位拼接还可以用嵌套的方式来表达,如下所示:
E. verilog存储器
reg[8:1] Store[N];//N存储深度
F. verilog中如何将二维存储器转为一维的数组并赋值,求大神帮忙!
mole pixel_interpolation(
input wire clk,
input wire rst_n,
input wire ram_cs, // Active high
input wire ram_wr_en,
input wire [2:0] ram_addr,
input wire [5:0] ram_din,
output reg [5:0] ram_dout,
output reg [35:0] ram_bits
);
parameter val_0 = 6'h11;
parameter val_1 = 6'h12;
parameter val_2 = 6'h13;
parameter val_3 = 6'h24;
parameter val_4 = 6'h25;
parameter val_5 = 6'h26;
// generate the ram memory
reg [5:0] mem [0:5];
wire ram_wr_act = ram_cs & ram_wr_en & (ram_addr<3'd6);
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin // set initial values here according to your need
mem[0] <= val_0;
mem[1] <= val_1;
mem[2] <= val_2;
mem[3] <= val_3;
mem[4] <= val_4;
mem[5] <= val_5;
end
else if(ram_wr_act ) mem[ram_addr] <= ram_din;
end
wire ram_rd_act = ram_cs & ~ram_wr_en & (ram_addr<3'd6);
always @(posedge clk or negedge rst_n) begin
if(~rst_n) ram_dout <= 6'h0;
else if( ram_rd_act) ram_dout <= mem[ram_addr];
end
// generate the ram_bits
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin // set initial values here according to your need
ram_bits[5:0] <= val_0;
ram_bits[11:6] <= val_1;
ram_bits[17:12] <= val_2;
ram_bits[23:18] <= val_3;
ram_bits[29:24] <= val_4;
ram_bits[35:30] <= val_5;
end
else if(ram_wr_act ) begin
case(ram_addr)
3'd0 : ram_bits[5:0] <= ram_din;
3'd1 : ram_bits[11:6] <= ram_din;
3'd2 : ram_bits[17:12] <= ram_din;
3'd3 : ram_bits[23:18] <= ram_din;
3'd4 : ram_bits[29:24] <= ram_din;
3'd5 : ram_bits[35:30] <= ram_din;
endcase
end
end
G. verilog 普通存储器怎么由地址线决定写入或读取任意指定的地址
首先你这个地址肯定对应的一个寄存器或者存储器单元了,读取的话直接将其赋值给一个变量就好了比如一个256x8bit的RAM,你取地址为128的内容的话,就直接这样写:variable=ram[128];如果是非阻塞赋值的话,variable
H. 求verilog语言分别编写一个8位的ram和rom存储器
例化一个ram,dout宽度为1,深度为4(即地址宽度为2),f接dout,{b,a}接地址线。ram里面初始化内容为0,0,0,1。这样,当{b,a}为00,01,10时,输出0;11时输出1,实现与的功能
I. Verilog如何存储连续两个输入数据
比如你输入的是N位,那么定义2N宽的reg
reg [2N-1:0]shift_reg;
然后按照先后两个时钟次序,两次安高和低赋值:
shift_reg[N-1:0] <= in;
和
shift_reg[2N-1:N] <= in;
J. verilog 使用存储器时能不能直接引用某地址的某比特值
能,需要先从存储器把该地址的数据读出来Data,再引用数据的某比特值Data[n],位选